配置文件
1.bean标签的配置
1.1 scope范围配置
scope:指对象的作用范围,取值如下:
示例如下:
<bean id="唯一标识id" class="类的全限定名" scope=""></bean>
1.2 bean的创建时间
scope="singleton"时,加载配置文件时,bean对象就创建了
scope="prototype"时,在调用getbean()方法时才会创建对应的bean对象,并且会创建多个。
1.3 bean的生命周期配置
1.init_method:指定类中的初始化方法名称
2.destroy_method:指定类中的销毁方法名称
使用方法如下:
<bean id="唯一标识id" class="类的全限定名" scope="" init_method="" destroy_method=""></bean>
1.4 bean的实例化三种方式
1.无参构造方法实例化
<bean id="UserDao" class="类的全限定名"></bean>
2.工厂静态方法实例化
首先先写一个工厂类返回对象
public class FactoryTest1{
public static Object getUserDao(){
return new UserDaoimpl();
}
}
<bean id="UserDao" class="com.test.FactoryTest" factory_method="getUserDao"></bean>
3.工厂实例方法实例化
首先写一个工厂类返回对象(返回对象的方法不是静态的)
public class FactoryTest2{
public Object getUserDao(){
return new UserDaoimpl();
}
}
<bean id="factory" class="com.test.FactoryTest2"></bean>
<bean id="UserDao" factory_bean="factory" factory_method="getUserDao" >
注意:实例化工厂方法需要现有一个工厂类的实例。
2 bean的依赖注入
2.1 bean的依赖注入分析
依赖注入是spring框架IOC的一个具体实现
在编写程序时,使用控制反转,将对象的创建交给了spring容器,但是代码中不可能出现没有依赖的情况,依赖不会消失,只会减少,业务层还是会调用持久层的方法。
那这种业务层和持久层之间的依赖关系,在使用spring之后,就交给spring来维护了,简单来说就是,不用我们自己去获取,而是等待框架将持久层对象传到业务层。
2.2 bean对象的依赖注入的方式
1.构造方法
public class UserServiceImpl implements UserService{
private UserDao userdao;
//有参构造方法
private UserServiceImpl(UserDao userdao){
this.userdao=userdao;
}
//无参构造方法
private UserServiceImpl(){}
public void save(){
userdao.save;
}
}
<bean id="UserService" class="com.test.UserServiceImpl">
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
2.set方法
public class UserServiceImpl implements UserService{
private UserDao userdao;
public void setUserDao (UserDao userdao){
this.userdao=userdao;
}
public void save(){
userdao.save;
}
}
然后再配置文件中配置
<bean id="UserService" class="com.test.UserServiceImpl">
<property name="userDao"/>(--set方法后面的名字,大写要变成小写的--) ref="userDao(注入bean的唯一id)
</bean>
set方法注入还有一个p命名空间注入。
2.3 bean依赖注入的数据类型
上面的操作,都是注入对象的引用,除了对象的引用,普通数据类型和集合等都可以在容器中注入。
普通数据类型的注入:
public class UserDaoImpl implements UserDao{
private String username;
private int age;
public void setUsername (String name){
this.username=name;
}
public void setage (int age){
this.age=age;
}
public void save(){
userdao.save();
}
}
<bean id="UserDao" class="com.test.UserDaoImpl">
<property name="username" value="zhangsan"/>
<property name="age" value="18"/>
</bean>
集合的注入:
public class UserDaoImpl implements UserDao{
private map<String,Integer>
public void setMap(Map<String,Integer> map){
this.map=map;
}
public void save(){
userdao.save();
}
}
<bean id="UserDao" class="com.test.UserDaoImpl">
<property name="map">
<map>
<entry key="zhangsan" value="18"> </entry>
</map>
</property>
</bean>