博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring属性注入DI
阅读量:6828 次
发布时间:2019-06-26

本文共 3941 字,大约阅读时间需要 13 分钟。

spring setter方式注入:

 

注入对象属性

前提:

在bean对应实体中有对应的setter方法。

基础代码:

在bean中有另一个bean属性的setter方法。package cn.itcast.dao.impl;import cn.itcast.dao.PersonDao;public class PersonDaoBean implements PersonDao {    public void add(){        System.out.println("执行PersonDaoBean中的add()方法");    }}package cn.itcast.service.impl;import cn.itcast.dao.PersonDao;import cn.itcast.service.PersonService;public class PersonServiceBean implements PersonService {    private PersonDao personDao;        public void setPersonDao(PersonDao personDao) {        this.personDao = personDao;    }    public PersonDao getPersonDao() {        return personDao;    }        public void save(){        personDao.add();    }        }
View Code

ref方式注入:

name:注入的属性 ref:值所对应的bean的id

 

内部类方式::

 

两种方式的比较:

  前者的bean可以被其他bean使用,后者的内部bean不能被其他bean使用

 

基本数据类型的注入

 

集合属性的注入

准备工作:

public class PersonServiceBean implements PersonService {    private PersonDao personDao;    private Set
sets=new HashSet
(); private List
lists=new ArrayList
(); private Properties properties=new Properties(); private Map
maps=new HashMap
(); 。。。 }
View Code

 

第一个
第二个
第三个
第一
第二
第三
value1
value2
value3

 

构造器注入

public PersonServiceBean(PersonDao personDao,String name){        this.personDao=personDao;        this.name=name;    }          

注意:如果写了type,type对应的不是bean对象对应的实际type而是你的构造器中的参数的实际type。

 

field注入:(注解注入)

准备工作:

spring使用注解要先加入声明:

xmlns:context="http://www.springframework.org/schema/context"           http://www.springframework.org/schema/context           http://www.springframework.org/schema/context/spring-context-2.5.xsd

启动注解配置:

<context:annotation-config/>

 

例子:

这个配置隐式注入了多个对注释进行解析处理的处理器。

 

注入注解:

@Autowired(required=""):按类型装配

required属性类型为boolean,默认值为false,如果写为true的话,装配失败会报异常,如果为false,装配失败会装配null进去

@Resource(name=""):

name属性给了值的话直接查找对应的bean进行注入,如果name没有给值,先将name当成字段名在beans中查找,找不到再按类型查找对应的类型的bean进行注入

两个注解都可以写在属性上,也可以写在属性的setter方法上

@Autowired private PersonDao personDao;

@Resource(name="personDao") private PersonDao personDao;

按名称装配还可以这样写:

@AutoWried(required=true) @Qualifier(value="xxx")
前面学习注解的时候说过:注解中如果变量名为value的话,使用的时候可以省略掉value=

 

自动装配

了解即可,不建议使用,因为结果具有不可预知性。
例子:
<bean id="..." class="..." autowire="byType"/>
autowire属性取值如下:
byType对应上面的@AutoWried
byName对应上面的@Resource
constructor与byType类似,应用于构造参数,如果容器中没有找到匹配的bean,会抛出异常
autodetect:通过bean类的自省(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式。

注意一点:

如果装配找到多个匹配的bean,也会抛出异常。

 

转载地址:http://lnykl.baihongyu.com/

你可能感兴趣的文章
C#3.0实现变异赋值(Mutantic Assignment)
查看>>
MySql的一些基本使用及操作命令 (待更新)
查看>>
题目4:棋盘寻宝扩展
查看>>
[ASP.NET MVC 小牛之路]14 - Unobtrusive Ajax
查看>>
引爆你的集合灵感 [C#, LINQ]
查看>>
可以把Windows xp模仿Vista界面工具。
查看>>
对一些面试题的回答
查看>>
c# enum用法
查看>>
Struts2 中action之间的跳转(分享)
查看>>
HDU4707:Pet(DFS)
查看>>
html标签页图标
查看>>
C# list 新用法
查看>>
Android 获取控件相对于屏幕位置
查看>>
UITableViewAutomaticDimension
查看>>
常用的python模块
查看>>
程序源代码行数分析统计器
查看>>
DNGuard Enterprise v2.80 released
查看>>
[超强]废旧硬盘改造成扬声器!!
查看>>
WPP
查看>>
C# GetSchema Get List of Table 获取数据库中所有的表名以及表中的纪录条数的方法
查看>>