Spring-IOC容器-对象依赖

Spring

IOC容器:对象依赖关系的配置

示例接口和类

public class UserService implements IUserService {
private IUserDao userDao ;
// 接收IOC容器注入值
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}



public void save() {
userDao.save();
}

}

public class UserAction {
private IUserService userService;
//接收IOC容器注入值
public void setUserService(IUserService userService) {
this.userService = userService;
}

public String execute(){
userService.save();
return "success";
}
}

方式1:通过set方法注入,这种方式最常用!

        <bean id="userdao" class="cn.itcast.d_di2.UserDao"></bean>
<bean id="userService" class="cn.itcast.d_di2.UserService">
<property name="userDao" ref="userdao"></property>
</bean>
<bean id="userAction" class="cn.itcast.d_di2.UserAction" scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
方式2: 内部bean

总结: 当创建的对象,不被容器其他地方引用的时候,可以这样写! 这样写不通用,内部对象只能用一次

这里,action如果是单例,内部bean默认就是单例;  action如果是多例,内部bean就是多例

<bean id="userAction2" class="cn.itcast.d_di2.UserAction" scope="prototype">
<property name="userService">
<bean class="cn.itcast.d_di2.UserService">
<property name="userDao">
<bean class="cn.itcast.d_di2.UserDao"></bean>
</property>
</bean>
</property>
</bean>

方式3: p名称空间,给属性注入值

方式4:自动装配 (了解)

                a. default-autowire="byType"  配置到全局
当前所有的bean都采用”根据类型自动装配“
b. 配置到bean节点
autowire="byName"  根据名称自动装配, 会去容器找指定名称的对象,注入到set方法的参数中!
autowire="byType"  根据类型自动装配, 要确保改类型对应的对象在IOC容器中唯一,否则报错!
总结:
简化配置,但是维护麻烦!

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd" 

        default-autowire="byType">

        <bean id="userDao" class="cn.itcast.e_autowire.UserDao"></bean>
<bean id="userService" class="cn.itcast.e_autowire.UserService"></bean>
<bean id="userAction" class="cn.itcast.e_autowire.UserAction"></bean>
</beans>  

猜你喜欢

转载自blog.csdn.net/chenzuyibao/article/details/80603207