- 浏览: 117869 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (131)
- J2EE (5)
- 系统配置 (2)
- eclipse (3)
- MySQL (3)
- 数据库 (1)
- log4j (2)
- hibernate (5)
- JBOSS (3)
- https (2)
- Struts2 (7)
- javascript (2)
- CSS (4)
- HTTP (2)
- J2SE (1)
- apache (6)
- XML (1)
- android (3)
- session (3)
- Spring (3)
- 前端优化 (2)
- Drools (2)
- java笔试题 (8)
- SVN (2)
- linux (19)
- linux命令 (3)
- memcache (1)
- Servlet (2)
- Java RMI (1)
- 领域模型 (1)
- LVS (4)
- Linux shell (2)
- WEB (1)
- F5 (2)
- WinRAR (1)
- TCP (1)
- MQ (2)
- weblogic (1)
- winxp安装FTP (1)
- WebLogic和Tomcat (1)
- 虚拟机 (1)
- nexus-maven (1)
- jstl (1)
- jvm (1)
- Redis (2)
- mongodb (3)
- JAVA (2)
- mybatis (1)
- SQLserver (1)
- GC (1)
- zabbix (1)
- node (1)
最新评论
-
huosange:
简单明了,通俗易懂
JAVA为什么只允许单继承
Spring有三个注入方式,type1,type2,type3
type1 接口依赖
type2 setter/getter
type3 构造方法
type2,type3较用常用
首先来看一下type2
type2 setter/getter(引用注入)
例如,存在一个User类和Home类
user类里一个userName;一个Home对象的属性.
将两个bean的注入:(applicationContext.xml配置如下)
这里的user bean,引用了home bean,
运行时会打出
姓名为:liuyuanxi
家庭住址是:大连
这种方式就是setter/getter方式注入,习惯用JavaBean的人应该很容易理解这种方法,也就是能过<property name="userName">来指定属性. <value>liuyuanxi</value>来指定属性所对应的值.多少个属性就有多少个<property>
这里一个人,和家是两个类,也提到了两个bean之间的引用.也就是user bean给名字赋了值,home bean给地址赋了值.如果在user bean中想引入 home bean中的地址.就用<ref/>不再用<values>
type3 构造方法注入
这里我们在User里加入一个构造器
然后 把配置文件改一下:autowire=constructor;
运行时会打出
姓名为:liuyuanxi
家庭住址是:大连
这种方式就是构造器注入
我们再来看看spring的绑定
也就是通过bean属性autowire来设置
1. 通过bean属性autowire="byType"的设置可以使用bean在运行时候根据去寻找同类型的已定义属性,如果找不到则处于未绑定状态.(已定义好指在applicationContext.xml中初始化)这里我们把配置文件的 user bean的autowire改成autowire="byType",注意一定要把User的构造器去掉,要不然先找构造器,会出错.这里的home bean是属于,test.lyx.Home类型的,而user bean里有两个属性一个属性已经初始化,而另一个属性Home,就会自动找到.
applicationContext.xml配置如下:
运行时会打出
姓名为:liuyuanxi
家庭住址是:大连
这种方式就是构造器注入
但这样的寻找方式有一个弱点,
假如再注入一个Home bean,叫home1,运行时就会找到两个bean,出错.
如果我们想解决这种问题也很简单,我们可以把autowire改为,autowire="byName"方式来寻找.
但是这里一定要注意:Home bean的id名,一定要和属性名字一样.这里应该改成,id="myHome"
这样的话
运行时会打出
姓名为:liuyuanxi
家庭住址是:北京
而不在是大连了,这种寻找方式就是byName,也就是按属性的名字进行查询.注意:id一定要属性的名字一样.
2.我们来比较一个byname和 bytype这两种方式.
byname要比bytype精确些,因为id,是不能重名的.
而且假如存在一这样一种情况,两个user bean,分别为user1,user2,那么user1,user2都可以,打出北京.重用性很好.
到这可能有人会想到.user1,和user2调用的是同一个Home吗.你可以把他们的hashcode();打出来,你会发现地址是一样的,也就是说,是同一个bean.这里是因为singleton="true"的原因,如果你把singleton改成了"false"那就不是一个对象了.
3.如果把autowire=” constructor”也就是构造器注入一定要注意了,他是以byType进行查找,也就是说,Home bean,是不能出现两次,否则就会出错了.
4.如果autowire设置成为autodetect,他会一直找,直到找到一个合适的为止.constructor,bytype,byname的顺序去找.这种方式是不推荐使用的.因为你很难判断出执行的是那个.
type1 接口依赖
type2 setter/getter
type3 构造方法
type2,type3较用常用
首先来看一下type2
type2 setter/getter(引用注入)
例如,存在一个User类和Home类
user类里一个userName;一个Home对象的属性.
public class User { private String userName; private Home myHome; public Home getMyHome() { return myHome; } public void setMyHome(Home myHome) { this.myHome = myHome; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } } public class Home { private String homeAddr; public String getHomeAddr() { return homeAddr; } public void setHomeAddr(String homeAddr) { this.homeAddr = homeAddr; } } public class TestMain { public static void main(String[] args) { ApplicationContext context=new FileSystemXmlApplicationContext("test/lyx/applicationContext.xml"); User user1=(User)context.getBean("user"); System.out.println(“姓名为: ”+user1.getUserName()); System.out.println(“家庭住址是: ”+user1.getMyHome().getHomeAddr()); } }
将两个bean的注入:(applicationContext.xml配置如下)
<bean id="home" class="test.lyx.Home" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default"> <property name="homeAddr"> <value>大连</value> </property> </bean> <bean id="user" class="test.lyx.User" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default"> <property name="userName"> <value>liuyuanxi</value> </property> <property name="myHome"> <ref bean="home"/> </property> </bean>
这里的user bean,引用了home bean,
运行时会打出
姓名为:liuyuanxi
家庭住址是:大连
这种方式就是setter/getter方式注入,习惯用JavaBean的人应该很容易理解这种方法,也就是能过<property name="userName">来指定属性. <value>liuyuanxi</value>来指定属性所对应的值.多少个属性就有多少个<property>
这里一个人,和家是两个类,也提到了两个bean之间的引用.也就是user bean给名字赋了值,home bean给地址赋了值.如果在user bean中想引入 home bean中的地址.就用<ref/>不再用<values>
type3 构造方法注入
这里我们在User里加入一个构造器
public User(Home myHome){ this.myHome=myHome; }
然后 把配置文件改一下:autowire=constructor;
<bean id="home" class="test.lyx.Home" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default"> <property name="homeAddr"> <value>大连</value> </property> </bean> <bean id="user" class="test.lyx.User" abstract="false" singleton="true" lazy-init="default" autowire=" constructor " dependency-check="default"> <property name="userName"> <value>liuyuanxi</value> </property> <property name="myHome"> <ref bean="home"/> </property> </bean>
运行时会打出
姓名为:liuyuanxi
家庭住址是:大连
这种方式就是构造器注入
我们再来看看spring的绑定
也就是通过bean属性autowire来设置
1. 通过bean属性autowire="byType"的设置可以使用bean在运行时候根据去寻找同类型的已定义属性,如果找不到则处于未绑定状态.(已定义好指在applicationContext.xml中初始化)这里我们把配置文件的 user bean的autowire改成autowire="byType",注意一定要把User的构造器去掉,要不然先找构造器,会出错.这里的home bean是属于,test.lyx.Home类型的,而user bean里有两个属性一个属性已经初始化,而另一个属性Home,就会自动找到.
applicationContext.xml配置如下:
<bean id="home" class="test.lyx.Home" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default"> <property name="homeAddr"> <value>大连</value> </property> </bean> <bean id="user" class="test.lyx.User" abstract="false" singleton="true" lazy-init="default" autowire=" byType " dependency-check="default"> <property name="userName"> <value>liuyuanxi</value> </property> <property name="myHome"> <ref bean="home"/> </property> </bean>
运行时会打出
姓名为:liuyuanxi
家庭住址是:大连
这种方式就是构造器注入
但这样的寻找方式有一个弱点,
假如再注入一个Home bean,叫home1,运行时就会找到两个bean,出错.
<bean id="home1" class="test.lyx.Home" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default"> <property name="homeAddr"> <value>beijing</value> </property> </bean>
如果我们想解决这种问题也很简单,我们可以把autowire改为,autowire="byName"方式来寻找.
但是这里一定要注意:Home bean的id名,一定要和属性名字一样.这里应该改成,id="myHome"
<bean id="home1" class="test.lyx.Home" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default"> <property name="homeAddr"> <value>dalian</value> </property> </bean> <bean id="myHome" class="test.lyx.Home" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default"> <property name="homeAddr"> <value>北京</value> </property> </bean>
这样的话
运行时会打出
姓名为:liuyuanxi
家庭住址是:北京
而不在是大连了,这种寻找方式就是byName,也就是按属性的名字进行查询.注意:id一定要属性的名字一样.
2.我们来比较一个byname和 bytype这两种方式.
byname要比bytype精确些,因为id,是不能重名的.
而且假如存在一这样一种情况,两个user bean,分别为user1,user2,那么user1,user2都可以,打出北京.重用性很好.
到这可能有人会想到.user1,和user2调用的是同一个Home吗.你可以把他们的hashcode();打出来,你会发现地址是一样的,也就是说,是同一个bean.这里是因为singleton="true"的原因,如果你把singleton改成了"false"那就不是一个对象了.
3.如果把autowire=” constructor”也就是构造器注入一定要注意了,他是以byType进行查找,也就是说,Home bean,是不能出现两次,否则就会出错了.
4.如果autowire设置成为autodetect,他会一直找,直到找到一个合适的为止.constructor,bytype,byname的顺序去找.这种方式是不推荐使用的.因为你很难判断出执行的是那个.
发表评论
-
继承与多态
2014-07-10 23:26 505嘿嘿,举一个比较容易 ... -
常见java笔试题
2013-06-04 14:35 6521,常见数据类型 数据类型 byte ... -
e.printStackTrace()
2013-04-13 11:02 1274public void printStackTrace() ... -
Java构造器和方法的区别
2013-04-13 10:50 597我们说构造器是一种方法,就象讲澳大利亚的鸭嘴兽是一种哺育动物。 ... -
JAVA为什么只允许单继承
2013-04-13 10:50 2329一个类只能继承一个其他的类 在Java语言中禁止多重 ... -
hashtable和hashmap的区别
2013-04-12 11:43 6771 HashMap不是线程安全的 ... -
重写和重载
2013-04-12 11:15 876方法的重写Overriding和重 ...
相关推荐
spring依赖注入底层详解,很不错的资源,欢迎大家来下载学习。
spring jar 包详解 spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到spring-mock.jar来进行辅助测试,正式应用...
spring框架的注解的介绍,有需要的可以下载看一下,不错的选择
NULL 博文链接:https://forestqqqq.iteye.com/blog/2235287
基于spring3.0依赖注入详解,体验新特性。
spring注解注入示例详解[文].pdf
本文是我在业余时间学习spring注解注入之后的整理总结,希望能给对spring注入技术感兴趣和正在学习spring注入的同学们一些帮助。文中的内容都是我自己的摸索总结,当中难免会有偏差和错误,希望spring达人能够及时...
本文是我在业余时间学习spring注解注入之后的整理总结,希望能给对spring注入技术感兴趣和正在学习spring注入的同学们一些帮助。文中的内容都是我自己的摸索总结,当中难免会有偏差和错误,希望spring达人能够及时...
详解 Spring 3.0 基于 Annotation 的依赖注入实现。。详解 Spring 3.0 基于 Annotation 的依赖注入实现。。
主要介绍了详解Spring中bean的几种注入方式,主要介绍了4种注入,主要有属性注入、构造函数注入、工厂方法注入,非常具有实用价值,需要的朋友可以参考下
主要介绍了Spring Bean常用三种依赖注入方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Spring事务Transaction配置的五种注入方式详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
Spring3.0注解注入详解[总结].pdf
Spring BeanFactory Spring IOC(控制翻转)/DI(依赖注入) Spring Proxy Spring AOP 面向切面编程 Spring与JDBC整合 Spring声明式事务 Spring与Hibernate整合 Spring与Struts整合
本篇文章主要介绍了Spring Bean三种注入方式详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
详解Spring基于Annotation的依赖注入实现
主要为大家详细介绍了Spring boot工具类静态属性注入,及多环境配置详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
spring的控制反转和依赖注入详解
主要介绍了Spring为IOC容器注入Bean的五种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下