Spring-IOC配置(学习笔记)
来源:互联网 发布:好听的中文歌 知乎 编辑:程序博客网 时间:2024/05/20 20:17
Instantiating beans
- instantiation with a constructor
<bean id = "car" class = "com.jiakai.spring.Car"/>
public class Car {public Car(){System.out.println("make car with default");}public void run(){System.out.println("the car run on the road");}}
此时创建bean的时候,会调用class属性中类的,无参数的构造方法.
2. Instantiation with a static factory method
<bean id = "car" class = "com.jiakai.spring.BMW" factory-method = "createCar"/>
public class Car {private String name;public Car(){System.out.println("make car with default");}public void run(){System.out.println(name+" car run on the road");}public String getName() {return name;}public void setName(String name) {this.name = name;}}
public class BMW {public static Car createCar(){Car car = new Car();car.setName("bmw");System.out.println("make car with BMW static factory method");return car;}}
此时,会调用class属性中的类的,静态的,factory-method方法创建对象.
如果factory-method方法有参数,可以利用constructor-arg来设定.
<bean id = "car" class = "com.jiakai.spring.BMW" factory-method = "createCar"><constructor-arg name="msg" value="have args"/><constructor-arg name="level" value="55"/></bean>
package com.jiakai.spring;public class BMW {public static Car createCar(String msg,int level){System.out.println(msg);System.out.println(level);Car car = new Car();car.setName("bmw");System.out.println("make car with BMW static factory method");return car;}}
3.Instantiation using an instance factory method
<bean id = "bmw" class = "com.jiakai.spring.BMW"/> <bean id = "car" factory-bean = "bmw" factory-method = "createCar"><constructor-arg name="msg" value="have args"/><constructor-arg name="level" value="55"/></bean>
public class BMW {public Car createCar(String msg,int level){System.out.println(msg);System.out.println(level);Car car = new Car();car.setName("bmw");System.out.println("make car with BMW object factory method");return car;}}
此时,会调用factory-bean对象的factory-method方法创建bean.
Dependency injection
1.Constructor-based dependency injection
<bean id = "people" class = "com.jiakai.spring.People"><constructor-arg name="name" value="jiakai"/><constructor-arg name="age" value="22"/></bean>
package com.jiakai.spring;public class People {private String name;private int age;public People(String name,int age) {System.out.println("make people");this.name = name;this.age = age;}@Overridepublic String toString() {return name+" "+age;}}
2.Setter-based dependency injection
<bean id = "people" class = "com.jiakai.spring.People"><property name="name" value="gaoshang" /><property name="age" value="25" /></bean>
package com.jiakai.spring;public class People {private String name;private int age;public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return name+" "+age;}}
利用setter方法注入
3.Collections
<bean id="moreComplexObject" class="example.ComplexObject"><!-- results in a setAdminEmails(java.util.Properties) call --><property name="adminEmails"> <props> <prop key="administrator">administrator@example.org</prop> <prop key="support">support@example.org</prop> <prop key="development">development@example.org</prop> </props></property><!-- results in a setSomeList(java.util.List) call --><property name="someList"> <list> <value>a list element followed by a reference</value> <ref bean="myDataSource" /> </list></property><!-- results in a setSomeMap(java.util.Map) call --><property name="someMap"> <map> <entry key="an entry" value="just some string"/> <entry key ="a ref" value-ref="myDataSource"/> </map></property><!-- results in a setSomeSet(java.util.Set) call --><property name="someSet"> <set> <value>just some string</value> <ref bean="myDataSource" /> </set></property></bean>
4.Null and empty string values
<bean class="ExampleBean"><property name="email" value=""/></bean><bean class="ExampleBean"><property name="email"><null/></property></bean>
5.Lazy-initialized beans
<bean id = "car" class = "com.jiakai.spring.Car" lazy-init="true"/>
<beans default-lazy-init="true"><!-- no beans will be pre-instantiated... --></beans>
懒初始化
6.Autowiring collaborators
no: 不进行自动装配
byType:根据类型进行自动装配,如果匹配类型时,有多个匹配结果,则抛异常.
byName:根据名字进行自动装配,如果找不到名字相同的bean时,则抛异常.
Bean scopes
1.singleton:只有一个
2.prototype:每次都新建一个
Customizing the nature of a bean
<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/><bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/>
Annotation-based container configuration
<context:annotation-config/>
对Spring进行Annotation配置的时候,首先要在beans.xml里面加上上面那句话。
相当于,加载了一些类扫描器,这样Spring在初始化容器的时候,一边初始化bean一边扫描Annotation,辅助初始化bean.
1.@Required
标识该属性为对象必需的属性,如果构造该bean的时候,没有注入该属性,则抛异常。
相当于检查某属性,是否被注入过。
2.@Autowired
为对象注入属性,默认按类型装配,也可以与@Qualifier配合使用.
另外@Autowired中有一个required属性,默认为true.
<bean id = "people" class = "com.jiakai.spring.People"/><bean id = "ttcar" class = "com.jiakai.spring.Car"><qualifier value="cc"/></bean><bean id = "ttcar1" class = "com.jiakai.spring.Car"></bean>
package com.jiakai.spring;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Required;public class People {private String name;private int age;private Car car;public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}public void drive(){this.car.run();}@Autowired@Qualifier(value="cc")public void setCar(Car car) {this.car = car;}@Overridepublic String toString() {return name+" "+age;}}
3.@Resource
为对象注入属性,默认按照名称装配,当找不到与名称匹配的bean才会按照类型装配.
可以通过name属性指定,如果没有指定name属性,则按照属性名匹配.
<bean id = "people" class = "com.jiakai.spring.People"/><bean id = "car" class = "com.jiakai.spring.Car"/>
package com.jiakai.spring;import javax.annotation.Resource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Required;public class People {private String name;private int age;private Car car;public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}public void drive(){this.car.run();}@Resourcepublic void setCar(Car car) {this.car = car;}@Overridepublic String toString() {return name+" "+age;}}
4.@PostConstruct & @PreDestroy
@PostConstruct:在对象创建之后,调用该方法.
@PreDestroy:在对象销毁之前,调用该方法.
<bean id = "car" class = "com.jiakai.spring.Car"/>
package com.jiakai.spring;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;public class Car {private String name;public Car(){System.out.println("make car with default");}public void run(){System.out.println(name+" car run on the road");}public String getName() {return name;}public void setName(String name) {this.name = name;}@PostConstructpublic void init(){System.out.println("init");}@PreDestroypublic void destroy(){System.out.println("destroy");}}
5.@Component
相当于Spring会生成该类的一个对象,作为自己的组件bean进行管理.
该注解需要与下面的配置配合使用.
<context:component-scan base-package="com.jiakai"/>
设置需要扫描Component的包.
- Spring-IOC配置(学习笔记)
- Spring 学习笔记:Ioc 基本配置
- spring学习笔记一(IOC配置使用)
- Spring IoC学习笔记
- Spring IoC学习笔记
- Spring IOC学习笔记
- Spring学习笔记--IoC
- Spring IOC 学习笔记
- Spring学习笔记-IOC
- Spring学习笔记(一)----Spring IOC配置与应用
- Spring3 学习笔记之(spring core 之IoC配置使用)
- Spring学习笔记---2.1-IOC容器解析Bean配置信息
- Spring IoC学习笔记(1):注解配置Bean
- 学习Spring框架笔记之基于xml的IOC配置
- Spring学习笔记 (1)--- IoC
- Spring 之 IoC 学习笔记
- Spring framework IOC 学习笔记
- spring-ioc 学习笔记1
- ubuntu安装chrome报错解决
- 关闭虚拟机virtualbox
- magic square
- 朴素贝叶斯分类器本质上是线性分类器
- Linux 编程经典书籍推荐
- Spring-IOC配置(学习笔记)
- 为程序员量身定制的12个目标
- 3.3.2012
- HTML5实现圣诞树效果
- umbraco mvc角度看问题
- 70个面试技巧
- 程序员都应该知道的福利
- java/数学运算与流程控制
- 【转】Java开发中的线程安全选择与SwingUtilities类的invokeLater()或invokeAndWait()