Spring框架的配置文件开发
程序员文章站
2022-04-30 12:46:21
...
Spring框架的配置文件开发
1.入门案例
1.1 Maven坐标
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<!-- Lombok jar包 -->
<dependency>
<scope>compile</scope>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
<!-- 单元测试jar包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
1.2 JavaBean
public class Hello {
private String str;
//依赖注入的本质就是依靠set方法
public void setStr(String str) {
this.str = str;
}
@Override
public String toString() {
return "Hello{" +
"str='" + str + '\'' +
'}';
}
}
1.3 SpringIOC配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 使用spring创建对象,在spring中这些都称为bean -->
<bean class="org.westos.pojo.Hello" id="hello">
<property name="str" value="Spring"/>
</bean>
</beans>
1.4 测试类
public class MyTest {
public static void main(String[] args) {
//获取spring的上下文对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");
Hello hello = (Hello) applicationContext.getBean("hello");
System.out.println(hello.toString());
}
}
1.5 运行结果
2. Spring的依赖注入
2.1 set方法注入
<bean id="userT" class="org.westos.pojo.UserT" name="user2,u2">
<property name="name" value="张无忌" />
</bean>
属性说明:
- id : bean 的唯一标识符 ,也相当于我们学过的对象名
- class : bean 对象所对应的全限定名
- name:也是别名,而且name可以同时取多个别名
2.2 构造器注入
共三种注入方式
-
<!-- 第一种 采用参数名称注入,最常用的一种 --> <bean id="user" class="org.westos.pojo.User"> <constructor-arg name="name" value="赵敏"/> </bean>
-
<!-- 第二种 采用下标赋值注入,当有多个同类型参数时可用,但代码可读性不强 --> <bean id="user" class="org.westos.pojo.User"> <constructor-arg index="0" value="周芷若"/> </bean>
-
<!-- 第三种 采用变量类型注入 不建议使用(若两个string类型的参数则会报错)--> <bean id="user" class="org.westos.pojo.User"> <constructor-arg type="java.lang.String" value="蛛儿"/> </bean>
2.3 P名称空间注入(本质还是调set方法)
需要的约束文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
注入代码:
<bean id="user" class="org.westos.pojo.User" p:name="张三" p:age="24"/>
p名称空间注入,可以直接注入属性值。p : properties
2.4 C名称空间注入(本质还是调构造方法)
需要的约束文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
注入代码:
<!-- 采用属性值相对位置索引进行注入 -->
<bean id="user2" class="org.westos.pojo.User" c:_0="李四" c:_1="23"/>
<!-- 采用属性值的名称进行注入 -->
<bean id="user3" class="org.westos.pojo.User" c:name="王五" c:age="25"/>
2.5 集合属性注入
JavaBean(实体类)
Student:
@Data//使用Lombok简化开发
public class Student {
private String name;
private Address address;
private String[] books;
private List<String> hobbys;
private Map<String,String> card;
private Set<String> games;
private String wife;
private Properties info;
}
Address:
@Data
public class Address {
private String address;
}
SpringIOC配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="addr" class="org.westos.pojo.Address">
<property name="address" value="陕西省西安市"/>
</bean>
<bean class="org.westos.pojo.Student" id="student">
<!-- 第1种,普通值注入 -->
<property name="name" value="赵六"/>
<!-- 第2种,Bean注入 -->
<property name="address" ref="addr"/>
<!-- 第3种,数组注入 -->
<property name="books">
<array>
<value>红楼梦</value>
<value>西游记</value>
<value>水浒传</value>
<value>三国演义</value>
</array>
</property>
<!-- 第4种,list集合注入 -->
<property name="hobbys">
<list>
<value>唱歌</value>
<value>跳舞</value>
<value>rap</value>
<value>篮球</value>
</list>
</property>
<!-- 第5种,Map注入 -->
<property name="card">
<map>
<entry key="username" value="karen"/>
<entry key="password" value="123456"/>
</map>
</property>
<!-- 第6种,set注入 -->
<property name="games">
<set>
<value>LOL</value>
<value>DNF</value>
<value>CF</value>
</set>
</property>
<!-- 第7种,null注入 -->
<property name="wife">
<null/>
</property>
<!-- 第8种,properties注入 -->
<property name="info">
<props>
<prop key="学号">05158888</prop>
</props>
</property>
</bean>
</beans>
测试类:
public class MyTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Student student = context.getBean("student", Student.class);
System.out.println(student);
}
}
测试结果:
Student(
name=赵六,
address=Address(address=陕西省西安市),
books=[红楼梦, 西游记, 水浒传, 三国演义],
hobbys=[唱歌, 跳舞, rap, 篮球],
card={username=karen, password=123456},
games=[LOL, DNF, CF],
wife=null,
info={学号=05158888}
)
3. Bean的作用域与生命周期
3.1 bean的作用域
类别 | 说明 |
---|---|
singleton | 默认值,单例。在Spring容器中仅存在一个Bean实例。 |
prototype | 多例。每次从容器调用Bean时,都返回一个新的实例。 |
request | WEB项目中,每次HTTP请求都会创建一个新的Bean的实例,存入到request域中 |
session | WEB项目中,每次HTTP请求都会创建一个新的Bean的实例,存入到session域中 |
global session | WEB项目中,应用在Portlet环境.如果没有Portlet环境那么globalSession相当于session |
3.2 bean的作用范围和生命周期
-
单例对象:scope=“singleton”
- 一个应用只有一个对象的实例。它的作用范围就是整个引用。
- 生命周期:
- 对象出生:当应用加载,创建容器时,对象就被创建了。
- 对象活着:只要容器在,对象一直活着。
- 对象死亡:当应用卸载,销毁容器时,对象就被销毁了。
-
多例对象:scope=“prototype”
- 每次访问对象时,都会重新创建对象实例。
- 生命周期:
- 对象出生:当使用对象时,创建新的对象实例。
- 对象活着:只要对象在使用中,就一直活着。
- 对象死亡:当对象长时间不用时,被java的垃圾回收器回收了。
-
单例对象:scope=“singleton”
- 一个应用只有一个对象的实例。它的作用范围就是整个引用。
- 生命周期:
- 对象出生:当应用加载,创建容器时,对象就被创建了。
- 对象活着:只要容器在,对象一直活着。
- 对象死亡:当应用卸载,销毁容器时,对象就被销毁了。
-
多例对象:scope=“prototype”
- 每次访问对象时,都会重新创建对象实例。
- 生命周期:
- 对象出生:当使用对象时,创建新的对象实例。
- 对象活着:只要对象在使用中,就一直活着。
- 对象死亡:当对象长时间不用时,被java的垃圾回收器回收了。
上一篇: 脑洞大开,看图补脑的有趣图片
下一篇: 幺妹,你心目中的好男人是什么样子的?
推荐阅读
-
小弟我终于开始做了,开发大型项目才发现框架存在很大的有关问题。
-
请问 IOS 或 Android 开发中有向网页那样的前端框架,后端框架吗?
-
Git 项目推荐 | Go 语言编写的 web 完全开发框架_html/css_WEB-ITnose
-
第1章—Spring之旅—简化Spring的java开发
-
用Spring Boot进行后端开发(二):与微信小程序的交互,在微信小程序端获取数据并显示
-
Spring Boot的properties配置文件读取
-
【spring-boot】快速构建spring-boot微框架的方法
-
java JSP开发之Spring中Bean的使用
-
使用spring框架中的组件发送邮件功能说明
-
Java开发之spring security实现基于MongoDB的认证功能