從Spring3開始,加入了JavaConfig特性,JavaConfig特性容許開發者沒必要在Spring的xml配置文件中定義bean,能夠在Java Class中經過註釋配置bean。java
固然,你仍然能夠用經典的XML方法定義bean,JavaConfig只是另外一個替代方案。spring
spring-framework-3.2.4.RELEASEapache
jdk1.7.0_11eclipse
Maven3.0.5maven
eclipse-jee-juno-SR2-win32ui
沒必要新建項目,仍然沿用以前的項目Spring3-Example(見「Spring3系列1-HelloWord例子」)url
要想使用JavaConfig特性,必須引入CGLIB包,引入後,才能夠在Class配置bean(Class前加註釋@Configuration表示是一個Spring配置類)spa
<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.lei.demo</groupId> <artifactId>spring3-Example</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring3-Example</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- Spring3配置 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.4.RELEASE</version> </dependency> <!-- JavaConfig特性須要cglib包 --> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version> </dependency> </dependencies> </project>
接口IAnimal.java3d
package com.lei.demo.java_config; public interface IAnimal { public void makeSound(); }
Dog.java實現接口IAnimalcode
package com.lei.demo.java_config; public class Dog implements IAnimal { public void makeSound() { System.out.println("汪、汪、汪------"); } }
Cat.java實現接口IAnimal
package com.lei.demo.java_config; public class Cat implements IAnimal { public void makeSound() { System.out.println("喵、喵、喵******"); } }
看一下xml配置bean和JavaConfig配置bean的不一樣。
Xml方法,配置定義bean格式相似以下。
<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-3.0.xsd"> <bean id="animal" class="com.lei.demo.java_config.Dog"> </beans>
JavaConfig方法,經過使用註釋@Configuration 告訴Spring,這個Class是Spring的核心配置文件,而且經過使用註釋@Bean定義bean
package com.lei.demo.java_config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean(name="animal") public IAnimal getAnimal(){ return new Dog(); } }
App.javar以下:
package com.lei.demo.java_config; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class App { private static ApplicationContext context; public static void main(String[] args) { context = new AnnotationConfigApplicationContext(AppConfig.class); IAnimal obj = (IAnimal) context.getBean("animal"); obj.makeSound(); } }
運行App.java