您的位置:首页 > 编程语言 > Java开发

Spring学习总结 —— IoC/DI

2014-07-17 13:15 357 查看
Spring学习总结 —— IoC/DI

IoC:控制反转又称依赖注入(DI),其作用是降依类与类之间的耦合
IoC实现的几种方式属性注入 : 通过setter方法给属性设值
[b]① 创建bean类 并 声明 bean[/b]
//省去 bean类创建
//定义一个名 为 userDao的bean
<bean name="userDao" class="cn.jbit.demo.dao.impl.UserDaoImpl" />
注意: 用这种方式必须要给出无参数构造
[b]②[/b][/b][b]在需要注入的类中定义 属性 并至少 给出 setter方法[/b]
public class UserBizImpl implements IUserBiz(){
// 注入属性
private IUserDao userDao;
// 注入属性 的 setter
public void setUserDao(IUserDao userDao){
this.userDao=userDao;
}
// 方法略
}

③在xml中进行注入
//方式一 用<property /> 将 userDao注入到 userBiz
<bean name="userBiz" class="cn.jbit.demo.biz.impl.UserBizImpl">
<property name="userDao" ref="userDao"  />
</bean>
//方式二  用p命名空间方式 将 userDao 注入到 userBiz
<bean name="userBiz" class="cn.jbit.demo.biz.impl.UserBizImpl" p:userDao-ref="userDao" />


构造注入 : 通过带参构造方法给属性设值
①创建要注入的bean类 , 并在配置文件中声明bean对象
//省去类的创建
//声明一个userDao bean对象
<bean name="userDao" class="cn.jbit.demo.dao.impl.UserDaoImpl" />

②创建要被注入的类 并给出 所需的 构造器
public class UserBizImpl implements IUserBiz(){
// 注入属性
private IUserDao userDao;
// 注入属性 的 构造方法
public UserBizImpl(IUserDao userDao){
this.userDao=userDao
}

// 方法略
}

③在配置文件中进行注入
<bean name="userBiz" class="cn.jbit.demo.biz.impl.UserBizImpl" />
<constructor-arg> <!-- 注入userDao -->
<ref bean="userDao" />
</constructor-arg>
<!-- 如果有多个参数 用 <constructor-arg index="1" value="8" />  index:参数位置  value:值类型 , ref:引及型 -->

</bean>


反射注入 : 通过反射的方式给属性设值
[b]① 声明Bean : Spring的IoC组件[/b]@Repository[/b]:持久层组件,用于标注数据访问层组件,如DAO层组件。
@Service[/b]:服务成组件,用于标注业务层组件,如Service层组件;会根据Bean的类型实例化一个首字母为小写的bean的实例,如果要修改bean name可以在@Service("custome beanName")。
@Controller[/b]:用于标注控制层主键,如Strust的Action层组件。
@Component[/b]:泛指组件,当组件不好归类的时候可以用这个标注。
// 定义一个名为userDao的bean
@Component("userDao")
public class UserDao implements IUserDao(){
// 方法 略
}
[b][b]② [/b]装配 : 通过注解的方式对Bean的自动注入[/b]@Autowired :是通过"byType"的方式对Bean属性进行自动注入的,如果Bean属性的类型有多个,那么就添加@Qualifier("beanName") 加以区分。
//声明一个 名为 userBizImpl的 bean
@Service
public class UserBizImpl implements IUserBiz(){
// 注入名为 userDao 的bean
@Autowired
@Qualifier("userDao")
private IUserDao userDao;
// 方法略
}

@Resource:是通过"byType"的方式对Bean属性进行自动注入的,如果Bean属性的类型有多个,那么就用@Resource("beanName") ,@Resource("beanName") 是通过"byName"的方式对Bean属性进行自动注入的。
//声明一个 名为 userBiz的 bean
@Service
public class UserBiz implements IUserBiz(){
// 注入类型为 IUserDao 的bean
@Resource
private IUserDao userDao;

//注入name 为 userName 的bean;
@Resource("userName")
private IUserDao userDao1;
// 方法略
}


接口注入 : 在spring中被废弃,ejb中有用
Spring 对Bean的四种自动装配(注入)方式autowire= "byName" :通过Bean的名字对属性进行值注入
autowire="byType":通过属性的类型来对属性进行值注入。<慎用>
autowire="constructor":通过构造器来对属性进行值注入。<慎用>
autowire="autodetect":容器自动对属性进行值注入,先用constructor的方式,如果没有构造器,再用byType的方式。<尽量不用>
Spring Bean的应用范围scope="singleton"[/b]:单例(默认),对所有应用都只生成一个实例
scope="prototype"[/b]:对每个应用都生成一个实例
scope="request"[/b]:在web应用中有效,对每个请求都生成一个实例
scope="session"[/b]:在web应用中有效,对每个会话都生成一个实例
scope="global-session"[/b]:在web应用中有效,全局Http会话
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: