Spring的注入,主要包括类的注入,属性的注入。通过面向接口编程,结合Spring的依赖注入,可以动态的配置类的注入,使类之间实现解耦。属性的注入包括单个properties的注入,list,set,map,properties集中类型。下面直接上代码。
一、首先是普通bean的构造方法注入示例:
项目是通过maven构建,安装好maven之后,新建一个maven项目,选用maven-archetype-quickstart就行。pom.xml配置文件如下:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.csii.spring</groupId>
<artifactId>SpringBean_01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>SpringBean_01</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<springframework.version>3.2.3.RELEASE</springframework.version>
</properties>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo2.maven.org/maven2</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.aspectjweaver</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.5</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>7.5.4.v20111024</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<webApp>
<contextPath>/${project.artifactId}</contextPath>
</webApp>
</configuration>
</plugin>
</plugins>
</build>
<!-- <properties>
<springframework.version>3.2.3.RELEASE</springframework.version>
</properties> -->
</project>
1、新建一个Source-Folder,命名为src/main/resources,在这个目录下新建一个文件applicationContext.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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
<bean id="duke" class="com.csii.spring.Juggler"></bean>
<bean id="poem" class="com.csii.spring.Poem"></bean>
<bean id="poeticDuke" class="com.csii.spring.PoeticJuggle">
<constructor-arg name="beanBags" value="15"></constructor-arg>
<constructor-arg ref="poem"></constructor-arg>
</bean>
</beans>
2、新建两个类:诗人类Poem.java,杂技表演者类:Juggler.java,既会表演杂技又会朗诵诗歌的杂技表演者PoeticJuggle.java
/**
* 杂耍人
* */
public class Juggler implements Performer{
Logger logger=LoggerFactory.getLogger(Juggler.class);
private int beanBags=3;
public Juggler(){}
public Juggler(int beanBags){
this.beanBags=beanBags;
}
public void perform() throws Exception {
logger.info("******表演空抛 "+beanBags+"个豆袋子******");
}
}
public class Poem {
private Logger logger=LoggerFactory.getLogger(Poem.class);
public void recite(){
logger.info("******背诵诗歌******");
}
}
public class PoeticJuggle extends Juggler{
private Poem poem;
public PoeticJuggle(){
super();
}
public PoeticJuggle(Poem poem){
super();
this.poem=poem;
}
public PoeticJuggle(int beanBags,Poem poem){
super(beanBags);
this.poem=poem;
}
public void perform() throws Exception {
super.perform();
logger.info("******在抛豆袋子的时候...******");
poem.recite();
}
}
3、因为用到了sl4j打印日志,所以在src/main/resources目录下新建一个log4j.properties文件
log4j.rootLogger=INFO,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss,SSS} [message] %m%n
log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.File=D:/log.log
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss,SSS} [message] %m%n
4、在测试目录下写一个普通测试类,即可以测试。
public class Test {
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>public static void main(String[] args) throws Exception {
<span style="white-space:pre"> </span>ApplicationContext ctx=
<span style="white-space:pre"> </span> <span style="white-space:pre"> </span> new ClassPathXmlApplicationContext("applicationContext.xml");
<span style="white-space:pre"> </span>PoeticJuggle poeticJuggle=(PoeticJuggle)ctx.getBean("poeticDuke");
<span style="white-space:pre"> </span>poeticJuggle.perform();
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>}
}
输出结果日志:
INFO 2015-05-31 21:33:57,399 [message] ******表演空抛 15个豆袋子******
INFO 2015-05-31 21:33:57,400 [message] ******在抛豆袋子的时候...******
INFO 2015-05-31 21:33:57,400 [message] ******背诵诗歌******