计划一周时间,学习javaspring 不知道能学习到什么水平,坚持,也是对自己的一点肯定。
第二天打卡。
一、Spring 配置文件
1、Bean的标签范围
- singleton 默认值,单例
- bean的实例化个数为1
- 当加载配置文件的时候,Bean就会被创建
- prototype 多例的
- 实例化对象为多个
- 当使用getBean()方法的时候,Bean才会创建
2、Bean生命周期配置
- init-method:指定类中的初始化方法名称
- 对象创建完成后,通过对象调用初始化方法
- destory-method:指定类中销毁方法名称
1
<bean id="userDao" class="com.wwq.dao.impl.UserDaoImpl" init-method="init" destroy-method="destory"/>
3、Bean实例化的三种方式
- 无参构造方法实例化
- 工厂静态方法实例化
- 工厂实例方法实例化
4、Bean的依赖注入分析
因为UserService和UserDao都在Spring容器中,而最终程序直接使用的是UserService,所以在Spring容器中,将UserDao设置到UserService内部
5、Bean的依赖注入概念
依赖注入(Dependency Injection):它是Spring框架核心Ioc的具体实现。
在编写程序时,通过控制反转,把对象的创建交给Spring。但是代码中不可能出现没有依赖的情况,IOC解耦只是降低他们的依赖关系,但不会消除,例如:业务层仍然会调用持久层的方法
那这种业务层和持久层的依赖关系,在使用Spring之后,就让Spring来维护了。简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取
6、Bean依赖注入的方式
- 构造方法
- set方法
1 | //UserServiceImpl.java |
1 | //set方法注入配置 |
1 | //构造方法注入 |
p方法注入(本质也是set方法注入)
配置文件中要引入P命名空间
1
xmlns:p="http://www.springframework.org/schema/p"
1
2<!--p方法注入-->
<bean id="userService" class="com.wwq.service.UserServiceImpl" p:userDao-ref="userDao"/>
发现打卡是真的难啊,刚过两天就没能坚持下来,不说了。继续。。。。今天是2021年4月25日。。。感谢五一长假。
7、Bean的依赖注入的数据类型
bean除了对象的引用可以注入,普通的数据类型,集合都可以在容器中进行注入。
普通数据类型
applicationContext.xml
1
2
3
4
5
6
7
8<bean id="userDao" class="com.wwq.dao.impl.UserDaoImpl">
<property name="username" value="xx"/>
<property name="age" value="14"/>
</bean>
<bean id="userService" class="com.wwq.service.UserServiceImpl">
<constructor-arg ref="userDao"/>
</bean>
UserDaoImpl.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15private String username;
private int age;
public void setUsername(String username) {
this.username = username;
}
public void setAge(int age) {
this.age = age;
}
public void save() {
System.out.println(username+"======="+age);
System.out.println("save running.....");
}
引用数据类型
applicationContext.xml
1
2
3
4
5
6
7<bean id="userDao" class="com.wwq.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.wwq.service.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="userService" class="com.wwq.service.UserServiceImpl">
<constructor-arg ref="userDao"/>
</bean>
UserServiceImpl.java
1
2
3
4
5
6
7
8private UserDao userDao;
//set方法注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void save() {
userDao.save();
}
集合数据类型
- list
- map
properties
application.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36<bean id="userDao" class="com.wwq.dao.impl.UserDaoImpl">
<property name="strList">
<!-- list -->
<list>
<value>小王1</value>
<value>小王2</value>
<value>小王3</value>
</list>
</property>
<!-- map -->
<property name="useMap">
<map>
<entry key="u1" value-ref="user1"/>
<entry key="u2" value-ref="user2"/>
</map>
</property>
<!-- properties -->
<property name="properties">
<props>
<prop key="p1">pp1</prop>
<prop key="p2">pp2</prop>
</props>
</property>
</bean>
<bean id="user1" class="com.wwq.domain.User">
<property name="name" value="汤姆"/>
<property name="addr" value="北京"/>
</bean>
<bean id="user2" class="com.wwq.domain.User">
<property name="name" value="汤姆"/>
<property name="addr" value="北京"/>
</bean>
<bean id="userService" class="com.wwq.service.UserServiceImpl">
<constructor-arg ref="userDao"/>
</bean>
</beans>
UserDaoImpl.java
1
2
3
4
5
6
7
8
9
10private List<String> strList;
private Map<String, User> useMap;
private Properties properties;
public void save() {
System.out.println(strList);
System.out.println(useMap);
System.out.println(properties);
System.out.println("save running.....");
}
8、引入其他配置文件(分模块开发)
实际开发中。配置文件很繁杂其体积强大,所以将配置文件拆解到其他配置文件中,而在Spring主配置文件通过import标签进行加载
1 | <import resource="applicationContext-xxx.xml" |
9、知识要点
Spring的重点配置
- < bean >标签
- id属性:在容器中Bean实例的唯一标识,不允许重复
- class属性:要实例化的Bean的全限定名
- scopre属性:Bean的作用范围,常用的是singleton(默认)和prototype
- < property >标签:属性注入
- name属性:属性名称
- value属性:注入的普通属性值
- ref属性:注入对象的引用值
- < list >标签
- < map > 标签
- < properties > 标签
- < constructor-arg > 标签
- < import >标签:导入其他的Spring的分文件