配置bean
class: bean 的全类名,通过反射的方式在IOC容器中创建Bean,所以要求Bean中必须有无参数的构造方法。
id:唯一的。
setter注入
<bean id="" class="">
<property name="" value=""></property>
</bean>
构造器注入
<bean id="" class="">
<constructor-arg value="" type="java.lang.String"></constructor-arg>
<constructor-arg value="" index="0"></constructor-arg>
</bean>
细节
1.用property的<ref>属性简历bean之间的引用关系
<property name="" ref=""></property>
2.在内部声明bean(不能被别的bean引用)
<bean class="">
<constructor-arg value=""></constructor-arg>
</bean>
bean的作用域
<bean id="" class="" scope="prototype/singleton(默认)"></bean>
prototype:每申请一次生成一个新的bean(容器初始化时不创建)
singleton:整个容器声明周期内只创建一个bean(容器初始化时就创建了这个bean)
IOC容器中bean的生命周期方法
1.通过构造器或工厂方法创建bean实例
2.为bean的属性设置值和对其他bean的引用
3.调用bean的初始化方法
4.bean可以使用
5.容器关闭时,调用bean的销毁方法
<bean id="" class="" init-method="" destroy-method=""></bean>自己定义初始化和销毁方法。
实现BeanPostProcessor接口,并具体提供以下两个方法:
init-method之前被调用
Object postProcessBeforeInitialization(Object bean,String beanName)
init-method之后被调用
Object postProcessAfterInitialization(Object bean,String beanName)
可以在以上两个方法中修改返回的bean,甚至返回一个新的bean。
通过静态工厂方法来配置bean
class:指向静态工厂方法的全类名
factory-method:指向静态工厂方法的名字
constructor-arg:工厂方法需要传入参数时,用这个配置参数。
通过实例工厂方法来配置bean
配置工厂实例
<bean id="factory" class="com.instancefactory"></bean>
通过实例工厂方法来配置bean
<bean id="" factory-bean="factory" factory-method="getcar">
<constructor-arg value="ford"></constructor-arg>
</bean>
用注解联系两个bean之间的关系
1.某个变量或set方法之前加@Autowired注解,如下所示
@Autowired
private UserService uservice
这样就可以在ioc容器中自动找相应的bean
2.若一个接口有多个类型兼容的实现bean,那么@Autowired之后的括号中可以命名一个同一实现的属性名,如下
@UserService("userService")
public class UserServiceImpl implents UserService
@Autowired
public void setUserService(UserService userService)
3.也可以在对象和set方法之前加上@Autowired和@Quallifier如下所示
@Autowired
@Qualifier("userRepositoryImpl")
public void setUserRepository(UserRepository userrepository){
this.userrepository=userrepository;
}