2021-03-01

spring注解整理

原文链 id="spring注解整理">spring注解整理

@Configuration

使用@Configuration注解来标注的类为配置类,配置类就相当于配置文件,可以在配置类中来配置bean

@Configurationpublic class MainConfig { /**  * bean的类型是返回类型,bean的id默认是方法名称  * @return  */ @Bean public Person person(){  return new Person("张三",18); }}

Bean

使用@Bean来标注方法以此来进行bean的实例化,bean的类型是返回类型,bean的id默认是方法名称,可以使用@Bean注解来自定义bean的id以及初始化方法、销毁方法

public @interface Bean { @AliasFor("name") String[] value() default {}; @AliasFor("value") String[] name() default {}; Autowire autowire() default Autowire.NO; String initMethod() default ""; String destroyMethod() default "(inferred)";}
bean的作用域@Scope

可以在生成bean的方法上使用@Scope来指定bean的作用域

  • ConfigurableBeanFactory#SCOPE_PROTOTYPE
  • ConfigurableBeanFactory#SCOPE_SINGLETON
  • org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST
  • org.springframework.web.context.WebApplicationContext#SCOPE_SESSION
懒加载@Lazy

对于单例bean默认是在容器启动的时候加载,可以使用懒加载来使其第一次调用时在进行加载

在生成bean的方法上使用@Lazy来使用来加载

bean的条件注册@Conditional

@Conditional可以标注在类上,也可以标注在方法上,

public @interface Conditional { //Condition类数组 Class<? extends Condition>[] value();}

可以自定义Condition,需要实现Condition接口

@Primary

如果存在多个相同类型的bean,可以使用@Primary注解来标注bean,使得该bean为默认获取到的bean

工厂bean

可以使用FactoryBean来使用工厂bean来实例化bean,此时使用personFactoryBean来获取到的是Person的实例

@Beanpublic PersonFactoryBean personFactoryBean(){ return new PersonFactoryBean();}public class PersonFactoryBean implements FactoryBean<Person> { @Override public Person getObject() throws Exception {  return new Person(); } @Override public Class<?> getObjectType() {  return Person.class; } @Override public boolean isSingleton() {  return true; }}

如果想要获取到FactoryBean本身的实例,可以使用&personFactoryBean来获取

@ComponentScan

在配置类上标注组件扫描,相当于<context:component-scan>可以配置扫描的规则,使用basePackages来指定扫描的包,includeFilters和excludeFilters来配置包含或者排除的规则,与配置文件相似

两个示例

//排除Controller注解标识的bean@ComponentScan(basePackages = {"com.zhanghe.study.spring4.annotation"},excludeFilters = {  @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class})})// 只包含Controller注解标识的bean,不要忘记useDefaultFilters = false,与使用配置文件相似@ComponentScan(basePackages = {"com.zhanghe.study.spring4.annotation"},  useDefaultFilters = false,  includeFilters = {  @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class})})

过滤的类型有以下几种

  • ANNOTATION 按照注解,最常用
  • ASSIGNABLE_TYPE 按照类型
  • ASPECTJ 使用ASPECTJ表达式
  • REGEX 使用正则表达式
  • CUSTOM 使用自定义规则,实现TypeFilter接口

@Import

使用Import可以进行组件导入,对于第三包中的所需要用到的bean,没有必要每一个都使用@Bean来进行一个个的实例化,可以使用@Import来直接导入bean组件

  • @Import(要导入的组件名) bean的id默认为全类名

  • @Import(importSelector类) 实现importSelector接口,重写selectImports方法,返回值就是组件全类名的数组

    String[] selectImports(AnnotationMetadata importingClassMetadata);
  • @Import(ImportBeanDefinitionRegistrar类) 实现ImportBeanDefinitionRegistrar接口,重写registerBeanDefinitions方法,自己使用registry进行注册某些bean

    void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry);

@Value

使用@Value可以为属性进行赋值

基本数值

@Value("张三")String name;

Spel表达式

{}

环境变量中的值(配置文件中的值)

${}

需要引入配置文件,使用@PropertySource

@PropertySource(value = "classpath:test.properties")@Configurationpublic class MainConfig4 { @Bean public TestValue testValue(){  return new TestValue(); }}public class TestValue {		// 取出配置文件中的值 @Value("${test.value}") private int value;}

@EnableAspectJAutoProxy

在之前为了使@Aspect注解生效需要在配置文件中配置

<aop:aspectj-autoproxy/>

而该注解的作用就是使得@Aspect注解生效,开启基于注解的AOP模式,与上述配置功能相同

@EnableTransactionManagement

在之前为了使@Transaction注解生效,需要在配置文件中配置

<tx:annotation-driven transaction-manager="transactionManager"/>

而是用该注解的作用就是使得@Transaction注解生效,与上述配置功能相同

由于本身的博客百度没有收录,博客地 />






原文转载:http://www.shaoqun.com/a/596577.html

跨境电商:https://www.ikjzd.com/

ensogo:https://www.ikjzd.com/w/1485

eori:https://www.ikjzd.com/w/499


原文链id="spring注解整理">spring注解整理@Configuration使用@Configuration注解来标注的类为配置类,配置类就相当于配置文件,可以在配置类中来配置bean@ConfigurationpublicclassMainConfig{/***bean的类型是返回类型,bean的id默认是方法名称*@return*/@BeanpublicPe
巨鲸:https://www.ikjzd.com/w/1986
tradeindia:https://www.ikjzd.com/w/2305
hts:https://www.ikjzd.com/w/525
Airfov:https://www.ikjzd.com/w/2075
口述:那女人居然快递内裤给我:http://lady.shaoqun.com/m/a/44436.html
优化亚马逊图片 别忘了用这些类型的产品图:https://www.ikjzd.com/home/132469

No comments:

Post a Comment