【宁泊云】JavaConfig注解用法汇总

    技术2022-08-01  79

    目录

    JavaConfigJavaConfig注解用法汇总JavaConfig配置IoC/DI@Configuration@Bean@Scope@ComponentScan实例@Controller 控制器(注入服务)@Service 服务(注入dao)@Repository (实现dao访问)@Component JavaConfig配置导入@Import@ImportResource@PropertySource@Value@ConfigurationProperties案例

    JavaConfig

    我们通常使用Spring都会使用xml对Spring进行配置,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置文件以及复杂的Bean依赖关系,使用起来很不方便。

    在Spring3.0开始,Spring官方就已经开始推荐使用java配置来代替传统的xml配置了,它允许开发者将bean的定义和Spring的配置编写到到Java类中,不过似乎在国内并未推广盛行。当SpringBoot来临,人们才慢慢认识到java配置的优雅,但是,也仍然允许使用经典的XML方式来定义bean和配置spring。

    JavaConfig注解用法汇总

    JavaConfig配置IoC/DI

    @Configuration

    在类上贴该注解表示该类是Spring的配置类, 具有applicationContext.xml文件的作用

    @Bean

    在Spring的配置类的方法上贴该注解后, 该方法返回的对象会交给Spring容器管理,替代applicationContext.xml中的bean标签

    @Bean注解中的属性

    在xml配置bean的方式中,我们可以在bean标签中的id,name,init-method,destroy-method,scope等属性来完成对应的配置,在使用JavaConfig方式中我们也一样能通过相应的配置来完成同样的效果,这些效果大多封装到@Bean注解的属性中

    @Bean注解中的属性 name: 对应bean标签中的name属性,用于给bean取别名 initMethod: 对应bean标签中的init-method属性,配置bean的初始化方法 destroyMethod: 对应bean标签中的destroy-method属性,配置bean的销毁方法 注意: 在配置类的方式中有许多的默认规定,比如: bean的id就是当前方法名 配置多例则是在方法上添加@Scope(“prototype”)注解来实现,一般不用配,默认单例即可

    @Scope

    @Scope注解是springIoc容器中的一个作用域,在 Spring IoC 容器中具有以下几种作用域:基本作用域singleton(单例)、prototype(多例),Web 作用域(reqeust、session、globalsession),自定义作用域。

    a.singleton单例模式 – 全局有且仅有一个实例 b.prototype原型模式 – 每次获取Bean的时候会有一个新的实例 c.request – request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效 d.session – session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效 e.globalsession – global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义

    @ComponentScan

    在Spring配置类上贴该注解表示开启组件扫描器,默认扫描当前配置类所在的包,也可以自己指定,替代xml配置中的<context:component-scan />标签

    实例

    定义一个配置类,替代之前的XML文件,类中定义方法,返回bean对象交给Spring管理 /** * @Configuration * 贴有该注解的类表示Spring的配置类 * 用于替代传统的applicationContext.xml */ @Configuration public class JavaConfig { /** * @Bean * 该注解贴在配置类的方法上,该方法会被Spring容器自动调用 * 并且返回的对象交给Spring管理 * 相当于<bean id="someBean" class="cn.wolfcode.common.SomeBean"/> */ @Bean public SomeBean someBean() { return new SomeBean(); } } 加载配置类,启动AnnotationConfigApplicationContext容器对象,测试效果 public class App { @Test public void testJavaConfig() { //1:加载配置类,创建Spring容器 ApplicationContext ctx = new AnnotationConfigApplicationContext(JavaConfig.class); //2:从容器中取出SomeBean对象 SomeBean someBean = ctx.getBean(SomeBean.class); System.out.println(someBean); } }

    @Controller 控制器(注入服务)

    用于标注控制层组件(如struts中的action)

    @Service 服务(注入dao)

    用于标注业务层组件

    @Repository (实现dao访问)

    用于标注数据访问组件,即DAO组件.

    @Component

    把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>,泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

    JavaConfig配置导入

    @Import

    @Import(OtherConfig.class) :配置类与配置类间的引入注解。将指定的配置类,导入到当前配置类。等价于<import resource="applicationContext-web.xml" />

    @ImportResource

    ImportResources(locations="classpath:applicationContext.xml") :配置文件与配置类间引入注解,将指定配置文件,导入到当前配置类。

    @PropertySource

    从指定位置加装资源文件到Spring容器的环境变量对象中

    @Value

    单个参数获取

    通过@Value将外部配置文件的值动态注入到Bean中。配置文件主要有两类:

    application.properties。application.properties在spring boot启动时默认加载此文件自定义属性文件。自定义属性文件通过@PropertySource加载。@PropertySource可以同时加载多个文件,也可以加载单个文件。如果相同第一个属性文件和第二属性文件存在相同key,则最后一个属性文件里的key启作用。

    @ConfigurationProperties

    批量参数获取,通过@ConfigurationProperties(prefix = "propbind")的prefix前缀属性获取。

    案例

    资源文件的导入

    Processed: 0.011, SQL: 9