7 -- Spring的基本用法 -- 6... Spring 3.0 提供的Java配置管理
2017-01-07 22:23
218 查看
7.6 Spring 3.0 提供的Java配置管理
Spring 允许使用Java类进行配置管理,可以不使用XML来管理Bean,以及Bean之间的依赖关系。
Interface :Person
Interface : Axe
Class : Chinese
Class : StoneAxe
Class : SteelAxe
Class : AppConfig
Class :BeanTest
@Configuration : 用于修饰一个Java配置类
@Bean : 用于修饰一个方法,将该方法的返回值定义成容器中的一个Bean。
@Value : 用于修饰以恶搞Field,用于为该Field配置一个值,相当于配置一个变量。
@Import : 修饰一个Java配置类,用于向当前Java配置类中导入其他Java配置类。
@Scope : 用于修饰一个方法,指定该方法对应的Bean的生命域。
@Lazy : 用于修饰一个方法,指定该方法对应的Bean是否需要延迟初始化。
@DependsOn : 用于修饰一个方法,指定在初始化该方法对应的Bean之前初始化指定的Bean。
在实际项目中可能会混合使用XML配置和Java类配置混合使用:
⊙ 如果以XML配置为主,就需要让XMLpehiz能加载Java类配置。
由于以XML配置为主,因此应用创建Spring容器时,还是以XML配置文件为参数来创建ApplicationContext对象。那么Spring会先加载XML配置文件,在根据XML配置文件的指示去加载指定的Java配置类。
⊙ 如果以Java类配置为主,就需要让Java配置类能加载XML配置。在配置类上增加@ImportResource注解,修饰Java配置类,用于导入指定的XML配置文件。
由于以Java类配置为主,因此应用创建Spring容器时,应以Java配置类为参数,通过创建AnnotationConfigApplicationContext对象作为Spring容器。那么Spring会先加载Java配置类,在根据Java配置类的指示去加载指定的XML配置文件。
Spring 允许使用Java类进行配置管理,可以不使用XML来管理Bean,以及Bean之间的依赖关系。
Interface :Person
package edu.pri.lime._7_6.bean; public interface Person { void userAxe(); }
Interface : Axe
package edu.pri.lime._7_6.bean; public interface Axe { String chop(); }
Class : Chinese
package edu.pri.lime._7_6.bean.impl; import edu.pri.lime._7_6.bean.Axe; import edu.pri.lime._7_6.bean.Person; public class Chinese implements Person { private Axe axe; private String name; public Axe getAxe() { return axe; } public void setAxe(Axe axe) { this.axe = axe; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void userAxe() { System.out.println("我是:" + name + "," + axe.chop()); } }
Class : StoneAxe
package edu.pri.lime._7_6.bean.impl; import edu.pri.lime._7_6.bean.Axe; public class StoneAxe implements Axe { public String chop() { return "石斧砍柴真慢"; } }
Class : SteelAxe
package edu.pri.lime._7_6.bean.impl; import edu.pri.lime._7_6.bean.Axe; public class SteelAxe implements Axe { public String chop() { return "钢斧砍柴真快"; } }
Class : AppConfig
package edu.pri.lime._7_6.bean.configuration; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import edu.pri.lime._7_6.bean.Axe; import edu.pri.lime._7_6.bean.Person; import edu.pri.lime._7_6.bean.impl.Chinese; import edu.pri.lime._7_6.bean.impl.SteelAxe; import edu.pri.lime._7_6.bean.impl.StoneAxe; //指定类为配置类 @Configuration public class AppConfig { // 相当于定义一个名为personName的变量,其值为“lime” @Value("lime") String personName; // 配置Bean : stoneAxe @Bean(name="stoneAxe") public Axe stoneAxe(){ return new StoneAxe(); } // 配置Bean : steelAxe @Bean(name="steelAxe") public Axe steelAxe(){ return new SteelAxe(); } // 配置一个Bean:chinese @Bean(name="chinese") public Person chinese(){ Chinese person = new Chinese(); person.setName(personName); person.setAxe(steelAxe()); return person; } }
Class :BeanTest
package edu.pri.lime._7_6.main; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import edu.pri.lime._7_6.bean.Person; import edu.pri.lime._7_6.bean.configuration.AppConfig; import edu.pri.lime._7_6.bean.impl.Chinese; public class BeanTest { public static void main(String[] args){ //使用Java配置类管理Spring容器中的Bean及其依赖关系时,使用AnnotationConfigApplication创建容器 ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class); Person chinese = ctx.getBean("chinese",Chinese.class); chinese.userAxe(); } }
@Configuration : 用于修饰一个Java配置类
@Bean : 用于修饰一个方法,将该方法的返回值定义成容器中的一个Bean。
@Value : 用于修饰以恶搞Field,用于为该Field配置一个值,相当于配置一个变量。
@Import : 修饰一个Java配置类,用于向当前Java配置类中导入其他Java配置类。
@Scope : 用于修饰一个方法,指定该方法对应的Bean的生命域。
@Lazy : 用于修饰一个方法,指定该方法对应的Bean是否需要延迟初始化。
@DependsOn : 用于修饰一个方法,指定在初始化该方法对应的Bean之前初始化指定的Bean。
在实际项目中可能会混合使用XML配置和Java类配置混合使用:
⊙ 如果以XML配置为主,就需要让XMLpehiz能加载Java类配置。
<?xml version="1.0" encoding="UTF-8"?> <!-- Spring 配置文件的根元素,使用Spring-beans-4.0.xsd语义约束 --> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> <!-- 加载Java配置类 --> <bean class="edu.pri.lime._7_6.bean.configuration.AppConfig" /> </beans>
由于以XML配置为主,因此应用创建Spring容器时,还是以XML配置文件为参数来创建ApplicationContext对象。那么Spring会先加载XML配置文件,在根据XML配置文件的指示去加载指定的Java配置类。
⊙ 如果以Java类配置为主,就需要让Java配置类能加载XML配置。在配置类上增加@ImportResource注解,修饰Java配置类,用于导入指定的XML配置文件。
package edu.pri.lime._7_6.bean.configuration; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; import edu.pri.lime._7_6.bean.Axe; import edu.pri.lime._7_6.bean.Person; import edu.pri.lime._7_6.bean.impl.Chinese; import edu.pri.lime._7_6.bean.impl.SteelAxe; import edu.pri.lime._7_6.bean.impl.StoneAxe; //指定类为配置类 @Configuration @ImportResource(value = { "classpath:app_7_6.xml" }) public class AppConfig { // 相当于定义一个名为personName的变量,其值为“lime” @Value("lime") String personName; // 配置Bean : stoneAxe @Bean(name="stoneAxe") public Axe stoneAxe(){ return new StoneAxe(); } // 配置Bean : steelAxe @Bean(name="steelAxe") public Axe steelAxe(){ return new SteelAxe(); } // 配置一个Bean:chinese @Bean(name="chinese") public Person chinese(){ Chinese person = new Chinese(); person.setName(personName); person.setAxe(steelAxe()); return person; } }
由于以Java类配置为主,因此应用创建Spring容器时,应以Java配置类为参数,通过创建AnnotationConfigApplicationContext对象作为Spring容器。那么Spring会先加载Java配置类,在根据Java配置类的指示去加载指定的XML配置文件。
相关文章推荐
- Spring-----6、Spring3.0提供的Java配置管理
- 7.6: Spring3.0提供的Java配置管理
- 7 -- Spring的基本用法 -- 12... Spring 3.0 提供的表达式语言(SpEL)
- Java程序员从笨鸟到菜鸟之(七十)细谈Spring(三)IOC和spring基本配置详解
- Java程序员从笨鸟到菜鸟之(七十四)细谈Spring(六)spring之AOP基本概念和配置详解
- Spring中基于Java的配置@Configuration和@Bean用法
- spring基于java配置@Configuration和@Bean用法【代码示例】
- PropertyPlaceholderConfigurer的用法(使用spring提供的类读取数据库配置信息.properties)
- Java程序员从笨鸟到菜鸟之(七十)细谈Spring(三)IOC和spring基本配置详解
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
- Spring中基于Java的配置@Configuration和@Bean用法
- Spring中基于Java的配置@Configuration和@Bean用法
- Java程序员从笨鸟到菜鸟之(七十二)细谈Spring(四)利用注解实现spring基本配置详解
- JAVA SSH框架的配置(myeclipse(9)+tomcat(6.0.35)+struts(2.2.3)+Spring(3.0)+Hibernate(3.0))
- 从头认识Spring-2.8 基于java注解的配置(基本没有xml)
- JAVA SSH框架的配置(myeclipse(9)+tomcat(6.0.35)+struts(2.2.3)+Spring(3.0)+Hibernate(3.0))
- Java程序员从笨鸟到菜鸟之(七十四)细谈Spring(六)spring之AOP基本概念和配置详解
- Spring异常解决 java.lang.NullPointerException,配置spring管理hibernate时出错
- 配置开发库FMDB支持加密、***.xcconfig的用法以及提供一个免费的数据库管理app
- 初学Java三大框架集成需要掌握的基本配置[Spring,MyBatis,Struts]