当前位置:   article > 正文

spring常用注解(全)

spring常用注解

一、前言

Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式。

Spring注解方式减少了配置文件内容,更加便于管理,并且使用注解可以大大提高了开发效率!

注解本身是没有功能的,和xml一样,注解和xml都是一种元数据,元数据即解释数据的数据,也就是所谓的配置。

1、xml和注解的最佳实践:

  1. xml用来管理bean;
  2. 注解只负责完成属性的注入;

2、使用注解唯一需要注意的就是,必须开启注解的支持:

​<context:component-scan base-package="com.guo"></context:component-scan>
<context:annotation-config/>
  • 1
  • 2

二、Spring的常用注解

1、给容器中注入组件

(1)包扫描+组件标注注解

@Component:泛指各种组件

@Controller、@Service、@Repository都可以称为@Component。

@Controller:控制层

@Service:业务层

@Repository:数据访问层
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

(2)@Bean

导入第三方包里面的注解
  • 1

(3)@Import

@Import(要导入到容器中的组件);
  • 1
@Import({Color.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})
public class MainConfig2 {
	@Scope("prototype")
	@Bean("person")
	public Person person() {
		System.out.println("我是Person");
		return new Person("素小暖",25);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
@ImportSelector:返回需要导入的组件的全类名数组;
  • 1
public class MyImportSelector implements ImportSelector {
    //返回值就是导入容器的组件全类目
    // AnnotationMetadata 当前标注@Import注解的类的所有注解信息
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        //importingClassMetadata.get
        return new String[]{"com.atguigu.bean.Blue","com.atguigu.bean.Red"};
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
@ImportBeanDefinitionRegistrar:手动注册bean到容器中;
  • 1
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    /*
    * AnnotationMetadata:当前类的注解信息
    * BeanDefinitionRegistry:BeanDefinition注册类
    * 把所有需要添加到容器中的bean,调用BeanDefinitionRegistry.registerBeanDefinition手动注入
    *
    * */
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        boolean definition = registry.containsBeanDefinition("com.atguigu.bean.Red");
        boolean definition2 = registry.containsBeanDefinition("com.atguigu.bean.Blue");
        if(definition && definition2){
            //指定bean定义信息(bean的类型,bean的scope)
            RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(RainBow.class);
            //注册一个bean,指定bean名
            registry.registerBeanDefinition("rainBow",rootBeanDefinition);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
(4)使用spring提供的FactoryBean(工厂Bean)

1.默认获取到的是工厂Bean调用getObject创建的对象
2.要获取工厂Bean本身,需要在id前面加一个&
  • 1
  • 2
  • 3
  • 4
@Bean
public ColorFactoryBean colorFactoryBean(){
    return new ColorFactoryBean();
}
//创建一个spring定义的FactoryBean
public class ColorFactoryBean implements FactoryBean<Color> {
    //返回一个Color对象,并将Color添加到容器中
    public Color getObject() throws Exception {
        System.out.println("ColorFactoryBean,getObject()");
        return new Color();
    }
 
    public Class<?> getObjectType() {
        return Color.class;
    }
 
    public boolean isSingleton() {
        return false;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

2、注入bean的注解

@Autowired:由bean提供

@Autowired可以作用在变量、setter方法、构造函数上;
有个属性为required,可以配置为false;
  • 1
  • 2

@Inject:由JSR-330提供

@Inject用法和@Autowired一样。
  • 1

@Resource:由JSR-250提供

@Autowired、@Inject是默认按照类型匹配的,
@Resource是按照名称匹配的,
@Autowired如果需要按照名称匹配需要和@Qualifier一起使用,
@Inject和@Name一起使用。
  • 1
  • 2
  • 3
  • 4

@Primary

让spring进行自动装配的时候,默认使用首选的bean,和@Qualifier一个效果。
  • 1

3、@JsonIgnore

(1)作用

在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
  • 1

(2)使用方法

一般标记在属性或者方法上,返回的json数据即不包含该属性。
  • 1

(3)注解失效

如果注解失效,可能是因为你使用的是fastJson,尝试使用对应的注解来忽略字段,注解为:@JSONField(serialize = false),使用方法一样。
  • 1

4、初始化和销毁方法

(1)通过@Bean(initMethod="init",destoryMethod="destory")方法

(2)通过bean实现InitializingBean来定义初始化逻辑,DisposableBean定义销毁逻辑

(3)可以使用JSR250:@PostConstruct:初始化方法;@PreDestory:销毁方法。

(4)BeanPostProcessor:bean的后置处理器,在bean初始化前后进行一些处理工作

	postProcessBeforeInitialization:在初始化之前工作;

	postProcessAfterInitialization:在初始化工作之后工作;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

5、Java配置类相关注解

@Configuration

声明当前类为配置类;
  • 1

@Bean

注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式;
  • 1

@ComponentScan

用于对Component进行扫描;
  • 1

6、切面(AOP)相关注解

Spring支持AspectJ的注解式切面编程。

@Aspect 声明一个切面

@After 在方法执行之后执行(方法上)

@Before 在方法执行之前执行(方法上)

@Around 在方法执行之前与之后执行(方法上)

@PointCut 声明切点

在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

7、@Bean的属性支持

@Scope设置类型包括:

设置Spring容器如何新建Bean实例(方法上,得有@Bean)
  • 1

① Singleton

(单例,一个Spring容器中只有一个bean实例,默认模式),
  • 1

② Protetype

(每次调用新建一个bean),
  • 1

③ Request

(web项目中,给每个http request新建一个bean),
  • 1

④ Session

(web项目中,给每个http session新建一个bean),
  • 1

⑤ GlobalSession

(给每一个 global http session新建一个Bean实例)
  • 1

8、@Value注解

(1)支持如下方式的注入:

注入普通字符
注入操作系统属性
注入表达式结果
注入其它bean属性
注入文件资源
注入网站资源
注入配置文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

(2)@Value三种情况的用法。

${}是去找外部配置的参数,将值赋过来
#{}是SpEL表达式,去寻找对应变量的内容
#{}直接写字符串就是将字符串的值注入进去
  • 1
  • 2
  • 3

9、环境切换

@Profile

指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件。
  • 1

@Conditional

通过实现Condition接口,并重写matches方法,从而决定该bean是否被实例化。
  • 1

10、异步相关

@EnableAsync

配置类中通过此注解开启对异步任务的支持;
  • 1

@Async

在实际执行的bean方法使用该注解来声明其是一个异步任务(方法上或类上所有的方法都将异步,需要@EnableAsync开启异步任务)
  • 1

11、定时任务相关

@EnableScheduling

在配置类上使用,开启计划任务的支持(类上)
  • 1

@Scheduled

来申明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持)
  • 1

12、Enable***注解说明

这些注解主要是用来开启对xxx的支持:

@EnableAspectAutoProxy:开启对AspectJ自动代理的支持;
@EnableAsync:开启异步方法的支持;
@EnableScheduling:开启计划任务的支持;
@EnableWebMvc:开启web MVC的配置支持;
@EnableConfigurationProperties:开启对@ConfigurationProperties注解配置Bean的支持;
@EnableJpaRepositories:开启对SpringData JPA Repository的支持;
@EnableTransactionManagement:开启注解式事务的支持;
@EnableCaching:开启注解式的缓存支持;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

13、测试相关注解

@RunWith

运行器,Spring中通常用于对JUnit的支持
  • 1

@ContextConfiguration

用来加载配置配置文件,其中classes属性用来加载配置类。
  • 1
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:/*.xml"})
public class CDPlayerTest {
 
}
  • 1
  • 2
  • 3
  • 4
  • 5

@ContextConfiguration这个注解通常与@RunWith(SpringJUnit4ClassRunner.class)联合使用用来测试。

@ContextConfiguration括号里的locations = {“classpath*

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/347707
推荐阅读
相关标签