一. Bean标签基本配置
默认它调用类中的 无参构造函数,如果没有无参构造函数则不能创建成功。
基本属性: id: Bean实例在Spring容器中的唯一标识,class: Bean的全限定名称
二.Bean标签范围配置
scope:
singletion:
1、单例的。 2、实例数:1个, 3、实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例。4、对象运行:只要容器在,对象一直活着。5、销毁:应用卸载,销毁容器,对象被销毁。
prototype:
1、多例的。2、实例数:多个,3、实例化时机:当调用getBean()方法时实例化Bean。4、对象运行:只要对象在使用中,就一直活着。5、销毁:当对象长时间不用,被Java的垃圾回收器回收了。
三. Bean生命周期配置:
init-method: 指定类中的初始化方法名称。
destroy-method: 指定类中销毁方法名称。
四.Bean实例化三种方式:
无参构造方法实例化
工厂静态方法实例化
<bean id="userDao" class="com.it.factory.StaticFactory" factory-method="getUserDao"></bean>
public class StaticFactory {
public static UserDao getUserDao() {
return new UserDaoImpl();
}
}
工厂实例方法实例化
<bean id="factory" class="com.it.factory.DynamicFactory"></bean>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao" />
package com.it.factory;
import com.it.dao.UserDao;
import com.it.dao.impl.UserDaoImpl;
public class DynamicFactory {
public UserDao getUserDao() {
return new UserDaoImpl();
}
}
五.Bean的依赖注入:
1、Set方式
<bean id="userDao" class="com.it.dao.impl.UserDaoImpl"></bean>
<!-- 底下第一个 <property name="userDao" 是 UserServiceImpl setUserDao方法去掉set UserDao 再把U小写 得到 userDao -->
<!-- 第二个 <property ref="userDao"> 是 <bean id="userDao" class="com.it.dao.impl.UserDaoImpl"></bean> 这个beand-->
<bean id="userService" class="com.it.service.impl.UserServiceImpl" >
<property name="userDao" ref="userDao"></property>
</bean>
package com.it.service.impl;
import com.it.dao.UserDao;
import com.it.service.UserService;
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
//ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//UserDao userDao = (UserDao) app.getBean("userDao");
//userDao.save();
this.userDao.save();
}
}
Set注入方法还有一个简便的方法,使用P命名空间,可以省去子标签
1、引入P命名空间
xmlns:p="http://www.springframework.org/schema/p"
<bean id="userService" class="com.it.service.impl.UserServiceImpl" p:userDao-ref="userDao" ></bean>
2、有参构造
package com.it.service.impl;
import com.it.dao.UserDao;
import com.it.service.UserService;
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
public UserServiceImpl() {
}
/*public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}*/
@Override
public void save() {
//ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//UserDao userDao = (UserDao) app.getBean("userDao");
//userDao.save();
this.userDao.save();
}
}
<bean id="userService" class="com.it.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
六、 Bean的依赖注入的数据类型
注入数据的三种数据类型
- 普通数据类型
- 引用数据类型
- 集合数据类型
普通数据的注入:
private int age;
private String name;
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
<bean id="userService" class="com.it.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
<bean id="userDao" class="com.it.dao.impl.UserDaoImpl">
<property name="name" value="zhangsna" />
<property name="age" value="100" />
</bean>