java spring sql注入什么时候注入

spring bean setter属性注入 - 为程序员服务
为程序员服务
spring bean setter属性注入
我们可以方便的通过,也可以通过setter属性来做spring bean的注入。
注入简单类型的属性
一个简单的示例,我们给Person类定义age和name两个属性,然后在spring配置文件中通过属性注入值。
Person类的定义如下:
package cn.outofmemory.
public class Person {
public String getName() {
public void setName(String name) {
this.name =
public int getAge() {
public void setAge(int age) {
this.age =
Person类是一个纯粹的pojo类,而且目前他的两个属性都是简单类型,我们看下如何在spring配置文件中注入属性。
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"&
&bean class="cn.outofmemory.spring.Person"&
&property name="name" value="John"/&
&property name="age" value="20"/&
我们通过property节点来设置属性的值,name是属性的名字,注意不需要包含set,value是要设定的值。对于简单类型可以通过value来设置值,而对于复杂类型可以通过在property节点中嵌套bean节点来实现,也可以通过ref来引用已经定义好的bean
下面我们给Person类增加一个复杂类型的属性:
private ContactI
public ContactInfo getContact() {
public void setContact(ContactInfo contact) {
this.contact =
其中ContactInfo也是一个Pojo类,他的定义如下:
package cn.outofmemory.
public class ContactInfo {
public String getAddress() {
public void setAddress(String address) {
this.address =
public String getZip() {
public void setZip(String zip) {
this.zip =
我们要给spring配置文件中的bean配置这个复杂的属性有两种方式,分别如下:
内置bean方式:
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"&
&bean class="cn.outofmemory.spring.Person"&
&property name="name" value="John"/&
&property name="age" value="20"/&
&property name="contact"&
&bean class="cn.outofmemory.ContactInfo"&
&property name="address" value="Street 5th"/&
&property name="zip" value="9999"/&
&/property&
使用property的ref属性方式:
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"&
&bean class="cn.outofmemory.ContactInfo" id="concat"&
&property name="address" value="Street 5th" /&
&property name="zip" value="9999" /&
&bean class="cn.outofmemory.spring.Person"&
&property name="name" value="John" /&
&property name="age" value="20" /&
&property name="contact" ref="concat" /&
给spring bean注入List类型的属性:
我们给Person类添加下面的新属性,新属性的类型是泛型的String:
private List&String&
public List&String& getChildren() {
public void setChildren(List&String& children) {
this.children =
我们看下如何在spring配置文件中注入此list属性:
&bean class="cn.outofmemory.spring.Person"&
&property name="children"&
&value&James&/value&
&value&Mary&/value&
&/property&
同样可以给bean注入数组类型的属性
我们给Person类添加contacts数组,如下代码:
private ContactInfo[]
public ContactInfo[] getContacts() {
public void setContacts(ContactInfo[] contacts) {
this.contacts =
contacts属性的类型是ContactInfo类型的数组。在spring配置文件中可以用list类似的方式来注入,如下配置文件
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"&
&bean class="cn.outofmemory.ContactInfo" id="contact"&
&property name="address" value="Street 5th" /&
&property name="zip" value="9999" /&
&bean class="cn.outofmemory.spring.Person"&
&property name="name" value="John" /&
&property name="age" value="20" /&
&property name="contact" ref="concat" /&
&property name="children"&
&value&James&/value&
&value&Mary&/value&
&/property&
&property name="contacts"&
&bean class="cn.outofmemory.ContactInfo"&
&property name="address" value="Str. 100th"/&
&property name="zip" value="9999"/&
&ref bean="contact"/&
&/property&
注意contacts属性的第一个元素是一个bean节点,而第二个元素是ref节点,这里的ref需要指定bean属性,bean属性指向上面已经定义好的contact bean。
在spring配置文件中注入Map类型的属性
我们再给Person类添加一个Map类型的属性:
private Map&String,Object&
public Map&String, Object& getKvs() {
public void setKvs(Map&String, Object& kvs) {
this.kvs =
map类型在spring配置文件中可以这样来配置:
&property name="kvs"&
&entry key="key1" value="key2"&&/entry&
&entry key="key2"&
&bean class="cn.outofmemory.ContactInfo"&
&property name="address" value="Str. 100th"/&
&property name="zip" value="9999"/&
&entry key="key3" value-ref="contact"/&
&/property&
kvs属性节点内,首先是map节点,在map节点内是一系列的entry节点,这里有三个entry节点,第一个节点的key和value值都是简单的String类型,而第二个节点的值是内置的bean节点指定的ContactInfo,而第三个节点是使用value-ref属性指定的另外一个bean节点。
在Spring配置文件中指定Set类型的属性
我们首先给Person类添加一个Set类型的属性,如下:
private Set&String&
public Set&String& getRings() {
public void setRings(Set&String& rings) {
this.rings =
可以通过如下配置给bean添加Set类型的属性:
&property name="rings"&
&value&RingA&/value&
&value&RingB&/value&
&/property&
源码下载:
推荐阅读:
相关聚客文章博客访问: 4166304
博文数量: 646
注册时间:
认证徽章:
莫听穿林打叶声,何妨吟啸且徐行。
竹杖芒鞋轻胜马,谁怕?
一蓑烟雨任平生。
料峭春风吹酒醒,微冷,山头斜照却相迎。
回首向来萧瑟处,归去,也无风雨也无晴。
ITPUB论坛APP
ITPUB论坛APP
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Java技术
Spring IOC三种注入方式:
1.&&& 接口注入
2.&&& getter,setter方式注入
3.&&& 构造器注入
对象与对象之间的关系可以简单的理解为对象之间的依赖关系:
A类需要B类的一个实例来进行某些操作,比如在A类的方法中需要调用B类的方法来完成功能,叫做A类依赖于B类.
控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术,由容器控制程序之间的关系,而不是由代码直接控制.
1.接口注入
public class ClassA {
& private InterfaceB clzB;
& public void doSomething() {
&&& Ojbect obj = Class.forName(Config.BImplementation).newInstance();
&&& clzB = (InterfaceB)
&&& clzB.doIt();
上面代码中,ClassA依赖于InterfaceB的实现,如何获得InterfaceB实现类的实例?传统的方法是在代码中创建
InterfaceB实现类的实例,并将赋予clzB.这样一来,ClassA在编译期即依赖于InterfaceB的实现.为了将调用者与实现者在编译
期分离,于是有了上面的代码.
我们根据预先在配置文件中设定的实现类的类名(Config.BImplementation),动态加载实现类,并通过InterfaceB强制转型后为ClassA所用,这就是接口注入的一个最原始的雏形.
public class ClassA {
& private InterfaceB clzB;
& public Object doSomething(InterfaceB b) {
&&& clzB =
&&& return clzB.doIt();
上面代码中,加载接口实现并创建其实例的工作由容器完成.
在运行期,InterfaceB实例将由容器提供.即使在IOC的概念尚未确立时,这样的方法也已经频繁出现在我们的代码中.
public class MyServlet extends HttpServlet {
& public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {
HttpServletRequest和HttpServletResponse实例由Servlet Container在运行期动态注入.
2.Setter设置注入
基于设置模式的依赖注入机制更加直观,也更加自然.
public class ClassA {
& private InterfaceB clzB;
& public void setClzB(InterfaceB clzB) {
&&& this.clzB = clzB;
3.构造器注入
public class DIByConstructor {
& private final DataSource dataS
& public DIByConstructor(DataSource ds) {
&&& this.dataSource =
构造器注入,即通过构造函数完成依赖关系的设定,容器通过调用类的构造方法将其所需的依赖关系注入其中.
三种注入方式比较:
接口注入:
接口注入模式因为具备侵入性,它要求组件必须与特定的接口相关联,因此并不被看好,实际使用有限。
Setter 注入:
对于习惯了传统 javabean 开发的程序员,通过 setter 方法设定依赖关系更加直观。
如果依赖关系较为复杂,那么构造子注入模式的构造函数也会相当庞大,而此时设值注入模式则更为简洁。
如果用到了第三方类库,可能要求我们的组件提供一个默认的构造函数,此时构造子注入模式也不适用。
构造器注入:
在构造期间完成一个完整的、合法的对象。
所有依赖关系在构造函数中集中呈现。
依赖关系在构造时由容器一次性设定,组件被创建之后一直处于相对“不变”的稳定状态。
只有组件的创建者关心其内部依赖关系,对调用者而言,该依赖关系处于“黑盒”之中。
Spring使用注入方式,为什么使用注入方式,这系列问题实际归结起来就是一句话,Spring的注入和IoC(本人关于IoC的阐述)反转控制是一回事。
理论上:第三种注入方式(构造函数注入)在符合java使用原则上更加合理,第二种注入方式(setter注入)作为补充。
实际上:我个人认为第二种注入方式(setter注入)可以取得更加直观的效果,在使用工作上有不可比拟的优势,所以setter注入依赖关系应用更加广泛。
阅读(14465) | 评论(0) | 转发(0) |
相关热门文章
学习Timer类,定制自己的调度...
给主人留下些什么吧!~~
请登录后评论。Spring依赖注入:注解注入总结 - 为程序员服务
为程序员服务
Spring依赖注入:注解注入总结
注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired、Resource、Qualifier、Service、Controller、Repository、Component。
Autowired是自动注入,自动从spring的上下文找到合适的bean来注入
Resource用来指定名称注入
Qualifier和Autowired配合使用,指定bean的名称
Service,Controller,Repository分别标记类是Service层类,Controller层类,数据存储层的类,spring扫描注解配置时,会标记这些类要生成bean。
Component是一种泛指,标记类是组件,spring扫描注解配置时,会标记这些类要生成bean。
上面的Autowired和Resource是用来修饰字段,构造函数,或者设置方法,并做注入的。而Service,Controller,Repository,Component则是用来修饰类,标记这些类要生成bean。
下面我们通过实例项目来看下spring注解注入的使用。
首先新建一个maven项目,并在pom中添加spring相关的依赖,如果不知道添加那些依赖,请参照上一篇文章。
然后新建CarDao类,给它添加@Repository注解,如下代码:
package cn.outofmemory.
import org.springframework.stereotype.R
@Repository
public class CarDao {
public void insertCar(String car) {
String insertMsg = String.format(&inserting car %s&, car);
System.out.println(insertMsg);
新建CarService类,并给该类标注@Service注解,在这个类中定义CarDao的字段,并通过Autowired来修饰此字段,这样上面定义的CarDao类的实例就会自动注入到CarService的实例中了。
package cn.outofmemory.
import org.springframework.beans.factory.annotation.A
import org.springframework.stereotype.S
public class CarService {
@Autowired
private CarDao carD
public void addCar(String car) {
this.carDao.insertCar(car);
注意:Autowired注解有一个可以为空的属性required,可以用来指定字段是否是必须的,如果是必需的,则在找不到合适的实例注入时会抛出异常。
下面我们在App.java中使用上面测试下注解注入:
package cn.outofmemory.
import org.springframework.context.ApplicationC
import org.springframework.context.annotation.AnnotationConfigApplicationC
* Hello world!
public class App
public static void main( String[] args )
ApplicationContext appContext = new AnnotationConfigApplicationContext(&cn.outofmemory.helloannotation&);
CarService service = appContext.getBean(CarService.class);
service.addCar(&宝马&);
在上面的main方法中首先我们初始化了appContext,他是AnnotationConfigApplicationContext,它的构造函数接受一个package的名称,来限定要扫描的package。然后就可以通过appContext的getBean方法获得CarService的实例了。
上面的例子非常简单,单纯的使用AnnotationConfigApplicationContext就可以了,但是在实际项目中情况往往没有这么简单,还是需要spring配置文件的。在spring配置文件中也可以通过下面的配置让spring自动扫描注解配置。
&!-- bean annotation driven --&
&context:annotation-config /&
&context:component-scan base-package=&cn.outofmemory.helloannotation& &
&/context:component-scan&
下面我们看下混合使用spring配置和注解的例子,首先在项目中添加source folder,src/main/resources,并添加spring.xml, 其内容如下:
&?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:context=&http://www.springframework.org/schema/context&
xsi:schemaLocation=&http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd &&
&!-- bean annotation driven --&
&context:annotation-config /&
&context:component-scan base-package=&cn.outofmemory.helloannotation& &
&/context:component-scan&
&bean id=&sqliteCarDao& class=&cn.outofmemory.helloannotation.CarDao& &
&constructor-arg name=&driver& value=&sqlite&/&
在上面的配置文件中,我们通过context:annotation-config和context:component-sacn节点来指定要扫描注解注入,然后又定义了一个id为sqliteCarDao的bean,它的构造函数的driver值为sqlite。
我们修改下App.java使用xml配置文件,再运行下App看下会怎样。
package cn.outofmemory.
import org.springframework.context.ApplicationC
import org.springframework.context.annotation.AnnotationConfigApplicationC
import org.springframework.context.support.ClassPathXmlApplicationC
* Hello world!
public class App
public static void main( String[] args )
//ApplicationContext appContext = new AnnotationConfigApplicationContext(&cn.outofmemory.helloannotation&);
ApplicationContext appContext = new ClassPathXmlApplicationContext(&/spring.xml&);
CarService service = appContext.getBean(CarService.class);
service.addCar(&宝马&);
运行程序发现输出为:inserting car 宝马 into mysql,显然CarService自动注入的CarDao使用了默认构造函数构造的实例。是否可以通过注解指定使用spring.xml中配置的sqliteCarDao呢?
我们可以修改下CarService类,通过Qualifier注解来指定要使用的bean的名字。
如下,在指定Autowired注解时,同时指定Qualifier注解指定bean的名字
@Autowired
@Qualifier(&sqliteCarDao&)
private CarDao carD
重新运行下App.java 这次输出的是inserting car 宝马 into sqlite,这次使用了spring.xml中配置的bean了。
在文中开头我们还提到了Resouce注解,这个注解可以指定名字注入,我们再次修改下CarService类:
@Resource(name=&sqliteCarDao&)
private CarDao carD
javax.annotation.Resource注解实现的效果和@Autowired+@Qualifier的效果是一样的。
您可能的代码
相关聚客文章
荣誉:2078
相关专栏文章SHUIMOMO 的BLOG
用户名:SHUIMOMO
文章数:138
评论数:27
访问量:402732
注册日期:
阅读量:5863
阅读量:12276
阅读量:371212
阅读量:1065520
51CTO推荐博文
一.从XML文件中获取Bean的方法 1.采用BeanFactory方式 &&&&&&& Resource rs = new FileSystemResource("beans-config.xml"); &&&&&&& BeanFactory factory = new XmlBeanFactory(rs); &&&&&&& HelloBean helloBean = (HelloBean)factory.getBean("helloBean"); 采用BeanFactory方式,可以利用XmlBeanFactory从xml配置文件中获得bean,也可以使用其它方式,比如利用PropertiesFactoryBean从.property文件中获得。 2.采用ApplicationContext方式 采用BeanFactory对简单的应用程序来说就够了,可以获得对象管理上的便利性。 但是要获取一些特色和高级的容器功能,可以采用ApplicationContext。 ApplicationContext提供了一些高级的功能,比如: 1.提供取得资源文件更方便的方法 2.提供文字消息解析的方法 3.支持国际化(i18n)消息 4.可以发布事件,对事件感兴趣的Bean可以接收这些事件 Spring创始者建议采用ApplicationContext取代BeanFactory。 在实现ApplicationContext借口的类中,常用的几个: FileSystemXmlApplicationContext: 可以指定XML定义文件的相对路径或者绝对路径来读取定义文件。 ClassPathXmlApplicationCOntext: 可以从classpath中读取XML文件 XmlWebApplicationCOntext: 从Web应用程序的文件架构中,指定相对位置来读取定义文件。 一个简单的例子: package cn.blogjava. import org.springframework.context.ApplicationC import org.springframework.context.support.FileSystemXmlApplicationC public class SpringDemo { &&& public static void main(String[] args) { &&&&&&& ApplicationContext context = &&&&&&&&&&& new FileSystemXmlApplicationContext("beans-config.xml");&&&&&&& &&&&&&& HelloBean helloBean = (HelloBean)context.getBean("helloBean"); &&&&&&& System.out.print("Name: "); &&&&&&& System.out.println(helloBean.getName()); &&&&&&& System.out.print("Word: "); &&&&&&& System.out.println(helloBean.getHelloWord()); &&& } } 二.Type 2 IoC, Type 3 IoC Type2是利用setter方法完成依赖注入,这是Spring鼓励的。但也允许使用Type 3注入,也就是利用构造函数完成注入。 例如: package cn.blogjava. public class HelloBean { &&& &&& private String helloW &&& private S &&& &&& public HelloBean() { &&&&&&& &&& } &&& public HelloBean(String helloWord, String name) { &&&&&&& this.helloWord = helloW &&&&&&& this.name = &&& }&&& &&& &&& public String getHelloWord() { &&&&&&& return helloW &&& } &&& public void setHelloWord(String helloword) { &&&&&&& this.helloWord = &&& } &&& public String getName() { &&&&&&& &&& } &&& public void setName(String name) { &&&&&&& this.name = &&& } &&& } 配置文件: beans-config.xml &?xml version="1.0" encoding="UTF-8"?& &!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" &&& "http://www.springframework.org/dtd/spring-beans.dtd"& &beans& &&& &bean id="helloBean" class="cn.blogjava.hello.HelloBean" & &&&&&&& &constructor-arg index="0"& &&&&&&&&&&& &value&YYY!&/value& &&&&&&& &/constructor-arg& &&&&&&& &constructor-arg index="1"& &&&&&&&&&&& &value&Hello!&/value& &&&&&&& &/constructor-arg& &&& &/bean& &/beans& 三.属性参考 如果在Bean文件中已经有一个定义的Bean实例,可以让某个属性直接参考这个实例。 package cn.blogjava. import java.util.D public class HelloBean { &&& &&& private String helloW &&& private D &&& &&& public HelloBean() { &&&&&&& &&& } &&& &&& public String getHelloWord() { &&&&&&& return helloW &&& } &&& public void setHelloWord(String helloword) { &&&&&&& this.helloWord = &&& } &&& &&& public Date getDate() { &&&&&&& &&& } &&& public void setDate(Date date) { &&&&&&& this.date = &&& } } 配置文件 beans-config.xml &?xml version="1.0" encoding="UTF-8"?& &!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" &&& "http://www.springframework.org/dtd/spring-beans.dtd"& &beans& &&& &bean id="dateBean" class="java.util.Date"/& &&& &bean id="helloBean" class="cn.blogjava.hello.HelloBean" & &&&&&&& &property name="helloWord"& &&&&&&&&&&& &value&Hello!&/value& &&&&&&& &/property& &&&&&&& &property name="date"& &&&&&&&&&&& &ref bean="dateBean" /& &&&&&&& &/property&&&&&&&&&&&&&&&& &&& &/bean& &/beans& 如果某个Bean的实例只被参考一次,可以直接在属性定义时使用&bean&标签,并仅需要指定其"class"属性即可。 &&&&&&& &property name="date"& &&&&&&&&&&& &bean class="java.util.Date" /& &&&&&&& &/property&&&&&&&&&&&&&& 四.自动绑定 byType &?xml version="1.0" encoding="UTF-8"?& &!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" &&& "http://www.springframework.org/dtd/spring-beans.dtd"& &beans& &&& &bean id="dateBean" class="java.util.Date"/& &&& &bean id="helloBean" class="cn.blogjava.hello.HelloBean"& autowire="byType"& &&&&&&& &property name="helloWord"& &&&&&&&&&&& &value&Hello!&/value& &&&&&&& &/property& &&&&&&& &property name="name"& &&&&&&&&&&& &value&YYY!&/value& &&&&&&& &/property&&&&&&&&&&&&& &&& &/bean& &/beans&这里并没有指定helloBean的data属性,而是通过自动绑定,指定了"byType",所以会根据helloBean的setDate()方法所接受的类型,来判断定义文件中是否有类似的对象,并将之设定给helloBean的setDate(),如果无法完成绑定,会抛异常。 byName 根据id属性上指定的别名是否与setter名称一致来绑定。无法绑定,仅维持未绑定状态,不抛异常。 &?xml version="1.0" encoding="UTF-8"?& &!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" &&& "http://www.springframework.org/dtd/spring-beans.dtd"& &beans& &&& &bean id="date" class="java.util.Date"/& &&& &bean id="helloBean" class="cn.blogjava.hello.HelloBean"& autowire="byName"& &&&&&&& &property name="helloWord"& &&&&&&&&&&& &value&Hello!&/value& &&&&&&& &/property& &&&&&&& &property name="name"& &&&&&&&&&&& &value&YYY!&/value& &&&&&&& &/property&&&&&&&&&&&&& &&& &/bean& &/beans& autowire="constructor" 根据构造方法上的参数类型,来匹配。无法绑定抛异常。 autowire="autodetect" 会试着用constructor,byType等方式来建立依赖关系。 加入依赖检查 依赖检查有4种方式: simple只检查简单的属性,例如int或者String类型对象是否完成依赖。 objects检查对象类型的属性是否完成依赖。 all检查所有的属性,none是默认值,不检查依赖性。 &&& &bean id="helloBean" class="cn.blogjava.hello.HelloBean"& autowire="autodetect" dependency-check="all"& &&&&&&& &property name="helloWord"& &&&&&&&&&&& &value&Hello!&/value& &&&&&&& &/property& &&&&&&& &property name="name"& &&&&&&&&&&& &value&YYY!&/value& &&&&&&& &/property&&&&&&&&&&&&& &&& &/bean& 五.集合对象的注入 对于像数组、List、Set、Map等集合对象,在注入前若必须填充一些对象到集合中,然后再将集合对象注入到Bean中时,可以交给Spring的IoC容器自动维护或者生成集合对象,并完成依赖注入。 SomeBean.java package cn.blogjava. import java.util.L import java.util.M public class SomeBean { &&& &&& private String[] someStrA &&& private Some[] someObjectA &&& private List someL &&& private Map someM &&& public List getSomeList() { &&&&&&& return someL &&& } &&& public void setSomeList(List someList) { &&&&&&& this.someList = someL &&& } &&& public Map getSomeMap() { &&&&&&& return someM &&& } &&& public void setSomeMap(Map someMap) { &&&&&&& this.someMap = someM &&& } &&& public Some[] getSomeObjectArray() { &&&&&&& return someObjectA &&& } &&& public void setSomeObjectArray(Some[] someObjectArray) { &&&&&&& this.someObjectArray = someObjectA &&& } &&& public String[] getSomeStrArray() { &&&&&&& return someStrA &&& } &&& public void setSomeStrArray(String[] someStrArray) { &&&&&&& this.someStrArray = someStrA &&& } &&& &&& } Some.java package cn.blogjava. public class Some { &&& private S &&& public String getName() { &&&&&&& &&& } &&& public void setName(String name) { &&&&&&& this.name = &&& }&&& &&& &&& public String toString(){ &&&&&&& &&& } } beans-config.xml &?xml version="1.0" encoding="UTF-8"?& &!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" &&& "http://www.springframework.org/dtd/spring-beans.dtd"& &beans& &&& &bean id="some1" class="cn.blogjava.hello.Some"& &&&&&&& &property name="name"& &&&&&&&&&&& &value&YYY&/value& &&&&&&& &/property& &&& &/bean& &&& &&& &bean id="some2" class="cn.blogjava.hello.Some"& &&&&&&& &property name="name"& &&&&&&&&&&& &value&BYF&/value& &&&&&&& &/property& &&& &/bean& &&& &&& &bean id="someBean" class="cn.blogjava.hello.SomeBean"& &&&&&&& &property name="someStrArray"& &&&&&&&&&&& &list& &&&&&&&&&&&&&&& &value&Hello!&/value& &&&&&&&&&&&&&&& &value&Welcome!&/value& &&&&&&&&&&& &/list& &&&&&&& &/property& &&&&&&& &&&&&&& &property name="someObjectArray"& &&&&&&&&&&& &list& &&&&&&&&&&&&&&& &ref bean="some1"/& &&&&&&&&&&&&&&& &ref bean="some2"/& &&&&&&&&&&& &/list& &&&&&&& &/property& &&&&&&& &&&&&&& &property name="someList"& &&&&&&&&&&& &list& &&&&&&&&&&&&&&& &ref bean="some1"/& &&&&&&&&&&&&&&& &ref bean="some2"/&&&&&&&&&&&& &&&&&&&&&&& &/list& &&&&&&& &/property& &&&&&&& &&&&&&& &property name="someMap"& &&&&&&&&&&& &map& &&&&&&&&&&&&&&& &entry key="MapTest"& &&&&&&&&&&&&&&&&&&& &value&Hello YYY!&/value& &&&&&&&&&&&&&&& &/entry& &&&&&&&&&&&&&&& &entry key="someKey1"& &&&&&&&&&&&&&&&&&&& &ref bean="some1" /& &&&&&&&&&&&&&&& &/entry& &&&&&&&&&&& &/map& &&&&&&& &/property& &&& &/bean& &&&&&&& &&& &bean id="helloBean" class="cn.blogjava.hello.HelloBean" & &&& &/bean& &/beans& 测试类:SpringDemo.java package cn.blogjava. import java.util.L import java.util.M import org.springframework.context.ApplicationC import org.springframework.context.support.FileSystemXmlApplicationC public class SpringDemo { &&& public static void main(String[] args) { &&&&&&& ApplicationContext context = &&&&&&&&&&& new FileSystemXmlApplicationContext("beans-config.xml");&&&&&&& &&&&&&& SomeBean someBean = (SomeBean)context.getBean("someBean"); &&&&&&& //取得数组类型依赖注入对象 &&&&&&& String[] strs = (String[])someBean.getSomeStrArray(); &&&&&&& Some[] somes = (Some[])someBean.getSomeObjectArray(); &&&&&&& for(int i=0; i & strs. i++){ &&&&&&&&&&& System.out.println(strs[i] + "," + somes[i].getName()); &&&&&&& } &&&&&&& &&&&&&& System.out.println(); &&&&&&& //取得List类型依赖注入对象 &&&&&&& List someList = someBean.getSomeList(); &&&&&&& for(int i=0; i & someList.size(); i++) { &&&&&&&&&&& System.out.println(someList.get(i)); &&&&&&& } &&&&&&& &&&&&&& System.out.println(); &&&&&&& //取得Map类型依赖注入对象 &&&&&&& Map someMap = someBean.getSomeMap(); &&&&&&& System.out.println(someMap.get("MapTest")); &&&&&&& System.out.println(someMap.get("someKey1")); &&& } } & list, set, map和props元素分别用来设置类型为List,Set,Map和Propertis的属性值。分别用来为bean传入集合值。 对应的spring的配置文件举例如下: 1.&? xml version="1.0" encoding="gb2312" ?&&&& 2. &! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"&& 3. "http://www.springframework.org/dtd/spring-beans.dtd" &&&& 4.&&& 5. & beans &&&& 6.&&& 7.& & bean& id ="chinese"& class ="Chinese" &&&& 8.& & property& name ="friends" &&&& 9.&&&&&&&&&&&& & list &&&& 10.&&&&&&&&&&&&&&&& & value & 张三 &/ value &&&& 11.&&&&&&&&&&&&&&&& & value & 李四 &/ value &&&& 12.&&&&&&&&&&&&&&&& & value & 王五 &/ value &&&& 13.&&&&&&&&&&&& &/ list &&&& 14.&& &/ property &&&& 15.&& & property& name ="score" &&&& 16.&&&&&&&&&&&& & map &&&& 17.&&&&&&&&&&&&&&&& & entry& key ="数学" &&&& 18.&&&&&&&&&&&&&&&&&&&& & value & 60 &/ value &&&& 19.&&&&&&&&&&&&&&&& &/ entry &&&& 20.&&&&&&&&&&&&&&&& & entry& key ="英语" &&&& 21.&&&&&&&&&&&&&&&&&&&& & value & 70 &/ value &&&& 22.&&&&&&&&&&&&&&&& &/ entry &&&& 23.&&&&&&&&&&&&&&&& & entry& key ="语文" &&&& 24.&&&&&&&&&&&&&&&&&&&& & value & 80 &/ value &&&& 25.&&&&&&&&&&&&&&&& &/ entry &&&& 26.&&&&&&&&&&&&&&&& & entry& key ="物理" &&&& 27.&&&&&&&&&&&&&&&&&&&& & value & 90 &/ value &&&& 28.&&&&&&&&&&&&&&&& &/ entry &&&& 29.&&&&&&&&&&&&&&&& & entry& key ="化学" &&&& 30.&&&&&&&&&&&&&&&&&&&& & value & 95 &/ value &&&& 31.&&&&&&&&&&&&&&&& &/ entry &&&& 32.&&&&&&&&&&&& &/ map &&&& 33.&& &/ property &&&& 34.&& & property& name ="basicInfo" &&&& 35.&&&&&&&&&&&& & props &&&& 36.&&&&&&&&&&&&&&&& & prop& key ="身高" & 165 &/ prop &&&& 37.&&&&&&&&&&&&&&&& & prop& key ="体重" & 45kg &/ prop &&&& 38.&&&&&&&&&&&&&&&& & prop& key ="学历" & 大学本科 &/ prop &&&& 39.&&&&&&&&&&&& &/ props &&&& 40.&&& &/ property &&&& 41.&&& & property& name ="interest" &&&& 42.&&&&&&&&&&&& & set &&&& 43.&&&&&&&&&&&&&&&& & value & 唱歌 &/ value &&&& 44.&&&&&&&&&&&&&&&& & value & 跳舞 &/ value &&&& 45.&&&&&&&&&&&&&&&& & value & 书法 &/ value &&&& 46.&&&&&&&&&&&& &/ set &&&& 47.&&& &/ property &&&& 48.&&& 49. &/ bean &&&& 50.&&& 51. &/ beans &&&& 1.public&& class& Chinese& implements& People&& ...{&& 2.&&&& private& List friends& =&& new& ArrayList();&& 3.&&&& private& Map score& =&& new& HashMap();&& 4.&&&& private& Properties basicInfo& =&& new& Properties();&& 5.&&&& private& Set interest& =&& new& HashSet();&& 6.&&&& // 省略对应set方法&&& 7.&&&& .&& 8.}&
问:为什么数组啊 属性变量都要在bean里面设定呢?
答:维护方便。维护数据时,只需要改配置文件。
了这篇文章
类别:┆阅读(0)┆评论(0)}

我要回帖

更多关于 java spring依赖注入 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信