Spring framework IOC 学习笔记
Spring framework 注入依赖相关 配置
本人是用maven 在pom.xml中的依赖如下
dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.2.RELEASE</version>
</dependency>
</dependencies>
构造依赖注入 注入-> Properties对象
xml:
<bean id="ioctest" class="com.jenius.web.meta.IocTest" >
<constructor-arg>
<props>
<prop key="color">red</prop>
<prop key="size">18</prop>
</props>
</constructor-arg>
</bean>
java source:
public IocTest(Properties ps)
{
this.color=ps.getProperty("color");
this.size=Integer.valueOf(ps.getProperty("size"));
}
———————————————————
注入->范性容器
map:
<constructor-arg>
<map>
<entry key="color" value="red"></entry>
<entry key="size" value="17"></entry>
</map>
</constructor-arg>
java source:
public IocTest(Map<String ,String> prams)
{
this.color=prams.get("color");
this.size=Integer.valueOf(prams.get("size"));
}
从配置文件 注入-> header.properties
color=green
size=22
application-context.xml
<bean id="ioctest" class="com.jenius.web.meta.IocTest" >
<constructor-arg name="color" value="${color}"></constructor-arg>
<constructor-arg name="size" value="${size}"></constructor-arg>
</bean>
<bean id="headerproperties"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:header.properties"/>
</bean>
java source:
public IocTest(String color,int size)
{
this.color = color;
this.size = size;
}
其他对象为参数是 构造函数的依赖注入 加serter 注入到其他对象:
application-context.xml
<bean id="testheader" class="com.jenius.web.test.TestHeader">
<property name="color" value="${color}"></property>
<property name="size" value="${size}"></property>
</bean>
<bean id="ioc" class="com.jenius.web.test.Ioc">
<constructor-arg>
<ref bean="testheader" />
</constructor-arg>
</bean>
<bean id="headerproperties"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:header.properties"/>
</bean>
——————————————————————
自动装配(用setter method)
autowire=“byName” 根据Bean 的名字来实现自动装配的 根据bean的名字来找的 。
<bean id="header" class="com.jenius.web.test.TestHeader">
<property name="color" value="${color}"></property>
<property name="size" value="${size}"></property>
</bean>
<bean id="ioc" class="com.jenius.web.test.Ioc" autowire="byName">
</bean>
autowire=“byType” 根据Bean类型
autowire=“constructor”
application-context.xml
<bean id="ioc" class="com.jenius.web.test.Ioc" autowire="constructor">
</bean>
java source:
public Ioc(Header header)
{
this.header=header;
}
———————————————
Annotation
@Component 定义Bean
@Value properties 注入 不需要setter method
application-context.xml
<context:component-scan base-package="com.jenius.web.test" />
<bean id="ioc" class="com.jenius.web.test.Ioc" autowire="constructor"><!-- 这里要用bean的注解所以要添加 -->
</bean>
<bean id="headerproperties"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:header.properties"/>
</bean>
java source :
public class Ioc {
private Header header;
public Ioc(Header header)// Annotation 默认的Bean 名称就是属性的名称这里指header
{
this.header=header;
}
public void use()
{
System.out.println("Ioc use "+header.getInfo());
header.dowork();
}
}
package com.jenius.web.test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.jenius.web.test.Header;
@Component("header") //默认是该类的名称(TestHeader类) bean的名称如果和默认名称不一致需要重新指定
public class TestHeader implements Header {
@Value("${color}")
private String color;
@Value("${size}")
private int size;
public void setColor(String color)
{
this.color=color;
}
public void setSize(int size)
{
this.size=size;
}
public void dowork() {
System.out.println("Working");
}
public String getInfo() {
return "size="+size+" color="+color;
}
}
@Autowirde @Resource 自动装配依赖 这两个依赖如果实在Spring框架中效果是一样的如果要更换IOC容器的话 要用@Resource 这个是在 javax.annotation.Resourc这个包里的
application-context.xml
<bean id="ioc" class="com.jenius.web.test.Ioc" ></bean> <!-- 将autowire="default"自动装配去掉 -->
java source ;
public class Ioc {
@Autowired //将setter method去掉
private Header header;
public void use()
{
System.out.println("Ioc use "+header.getInfo());
header.dowork();
}
}
@PostConstructor @PreDestroy 生命周期回调
作用相当于xml 文档中 <bean id=“” class=“” init-method=“” destroy-method=“” ></bean>