二、基于xml的Spring应用
1.SpringBean的配置详解
applicationContext.getBean中的取值实际是name中的别名,一般配置id与id等价,也可以配置name取多个别名
<bean id="userService" name="aaa,bbb" class="org.example.service.impl.UserServiceImpl">
<property name="xxxDao" ref="userDao"></property>
</bean>
2.bean的作用范围
<bean id="userService" class="org.example.service.impl.UserServiceImpl" scope="prototype">
<property name="xxxDao" ref="userDao"></property>
</bean>
3.bean的延迟加载
例:在创建的时候打上断点,一开始不会初始化Bean,当运行到创建语句的时候才进行创建
4.bean的初始化和销毁方法配置
一般不会调用bean的销毁方法,容器一般是直接挂掉了,不是自然关闭
除了这种配置来执行对bean的初始化操作,我们还可以通过实现InitializingBean接口来完成
public class UserServiceImpl implements UserService , InitializingBean {
public UserServiceImpl(){
System.out.println("service实例化。。。");
}
public void init(){
System.out.println("初始化...");
}
public void setXxxDao(UserDao userDao){
System.out.println("完成配置。。。");
System.out.println(userDao);
}
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet执行。。。");
}
}
5.spring的实例化配置
//对于带参数的构造在标签体里面利用这种方法来进行赋值
<constructor-arg name=" " value=" "></constructor-arg>
工厂方式实例化:
静态工厂方法:
//首先创建一个类实现一个静态方法创建并返回一Bean
public class mybean {
public static UserDao userDao(){
return new UserDaoImpl();
}
}
//在配置中指定工厂方法
<bean id="userDao1" class="org.example.factory.mybean" factory-method="userDao"></bean>
通过这种方法我们可以手动的在创建bean的时候进行一些其他业务逻辑操作,对于有些第三方包可以直接调用对应方法来创建bean
实例工厂方法:
在原来的基础上去掉静态static,xml配置如下
//先创建对象
<bean id="mybean" class="org.example.factory.mybean" ></bean>
//然后根据对象来调用方法
<bean id="userDao2" factory-bean="mybean" factory-method="userDao"></bean>
对于有些第三方的包,其构造不是通过构造方法产生而是通过某些对象的方法来产生bean,相比于静态方法,静态可以直接去调用方法,而实例化需要先创建对象
实现FactoryBean方法:
public class mybean implements FactoryBean<UserDao> {
public UserDao getObject() throws Exception {
return new UserDaoImpl();
}
public Class<?> getObjectType() {
return UserDao.class;
}
}
<bean id="userDao3" class="org.example.factory.mybean"></bean>
延迟实例化是因为在创建时先放在缓存中,用到的时候再调用,再次调用时就可以直接去缓存中拿来用
6.bean的注入方式
对于集合方式的依赖注入:
public class UserServiceImpl implements UserService {
private List<String> lists;
//利用set方法
public void setLists(List<String> lists) {
this.lists = lists;
}
private List<UserDao> listdao;
public void setListdao(List<UserDao> listdao) {
this.listdao = listdao;
}
public void show(){
System.out.println(lists);
System.out.println(listdao);
}
}
<bean id="userService" class="org.example.service.impl.UserServiceImpl">
<property name="lists">
<list>
<value>aaa</value>
<value>aaa</value>
<value>aaa</value>
</list>
</property>
<property name="listdao">
<list>
//也可以利用ref导入外部bean的id <ref bean="id"></ref>
<bean class="org.example.dao.impl.UserDaoImpl"></bean>
<bean class="org.example.dao.impl.UserDaoImpl"></bean>
<bean class="org.example.dao.impl.UserDaoImpl"></bean>
</list>
</property>
</bean>
<bean id="userDao" class="org.example.dao.impl.UserDaoImpl"></bean>
</beans>
7.spring的其他配置标签