写在前面:
接着记录自己的Spring学习之旅,若看不懂则建议先看上一篇博客SSM框架之Spring介绍开发流程/IDEA如何建立Spring项目,详细代码可在我的Gitee仓库ssm-learning克隆下载学习使用!
让spring容器来调用配置的信息创建对象
1.3.1.2 基本属性- id :唯一的标识,标明Bean实例在Spring容器中是唯一的,没有重复的
- class :Bean的全限定名,用Bean实例配置要创建的对象所属的类,一般写到类名
**默认调用==(Bean中class参数配置的类)类中==无参构造函数 **, 类中没有无参构造无法运行
1.3.1.4 Bean标签范围配置Scope 1.3.1.4.1 Scope参数| 参数 | 说明 | 实例化 |
|---|---|---|
| singleton | 单例,即当前项目中仅且只创建一个对象且每次调用都是同一对象,默认 | 容器加载时实例化 |
| prototype | 多例,即可调用多次且每次都不同 | 调用getBean时实例化 |
| request | 用于Web项目,当Spring容器创建完对象后将其存入request域中 | |
| session | 用于Web项目,当Spring容器创建完对象后将其存入session域中 | |
| global session | 用于Portlet环境,若无Portlet则等同于session |
| 参数 | 对象创建 | 对象运行 | 对象销毁 |
|---|---|---|---|
| prototype | 使用对象时创建 | 对象使用便在 | 长时间未使用则被Java垃圾回收器回收 |
| singleton | 应用加载容器创建时创建 | 容器在对象在 | 容器销毁对象销毁 |
即:对象和容器共生死
1.3.1.5 Bean的生命周期- init-method:指定类中初始化方法
- destroy-method:指定类中销毁方法
- 无参构造方法实例化 ,最常用,重点
- 工厂静态方法实例化
- 工厂实例化方法实例化
applicationContext中代码如下所示:
1.3.2 依赖注入 1.3.2.1 问题引入
目前外部Web层想要一个dao层对象,但是Web只能调用到Service对象,怎么实现?想法是配置好容器,在Service接口实现类中再次让Spring容器产生一个dao层对象并传过去,即getBean调用Service对象时service对象在getBean创建Dao层对象。
1.3.2.2 依赖注入上述这种需要对象是不直接创建而通过控制反转,交给容器创建对象的方式叫做依赖注入(Dependency Injection),是IOC的具体实现,可以降低业务层之间的耦合度。
1.3.2.3 依赖注入方式 1.3.2.3.1 构造方法- 在ServiceImpl中使用有参数的构造方法,更改如下:
private UserDao userDao;
// 有参构造
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
public UserServiceImpl() {
}
public void sayHello() {
// 土方法
// ApplicationContext appletContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// UserDao userDao1 = (UserDao) appletContext.getBean("UserDao");
// userDao1.sayHello();
// 依赖注入
userDao.sayHello();
}
- applicationContext中配置,如下:
1.3.2.3.1Set方法
- 在ServiceImpl中添加dao的set方法,更改如下:
// 用set方法注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
- applicationContext中配置,如下:
1.3.2.4 依赖注入数据类型 1.3.2.4.1 对象类型
上述操作已说明,不再赘述!
1.3.2.4.2 普通、引用及集合数据类型- 在实体类中创建int、String、List、map以及Properties属性并用set方法注入,如下:
/ 普通数据类型 int age; // 引用数据类型 String username; // 集合 private ListuserList; private Map userMap; // property private Properties properties; // 用set方法注入 public List getUserList() { return userList; } public void setUserList(List userList) { this.userList = userList; } public Map getUserMap() { return userMap; } public void setUserMap(Map userMap) { this.userMap = userMap; } public Properties getProperties() { return properties; } public void setProperties(Properties properties) { this.properties = properties; } public void setAge(int age) { this.age = age; } public void setUsername(String username) { this.username = username; } public void show() { System.out.println("测试普通数据类型"); System.out.println("username = " + username + ", age = " + age); System.out.println("集合数据类型"); System.out.println(userList); System.out.println(userMap); System.out.println(properties); }
- 在applicationContext中配置,如下:
1.3.2.5 测试
林青霞 刘诗诗 战秦琼 法外狂徒
用Junit单元测试,同
SSM框架之Spring介绍开发流程/IDEA如何建立Spring项目 中的项目测试操作,会在控制台出现相应结果!比如测试注入其它数据类型结果如下图
实际开发过程中会很复杂,不可能所有文件都配置到Spring配置xml文件中,会每人负责一块写到自己的配置文件中,然后在主配置文件通过import标签引入加载,这样也方便后期维护!
1.3.3.2 引入代码


