JAVA 注解

注解

  1. java注解 仅作简单记录
  • @BeforeClass所修饰的方法在所有方法加载前执行,而且他是静态的在类加载后就会执行该方法,在内存中只有一份实例,适合用来加载配置文件。
  • @AfterClass所修饰的方法在所有方法执行完毕之后执行,通常用来进行资源清理,例如关闭数据库连接。
  • @Before和@After在每个测试方法执行前都会执行一次。
  • 测试方法上面必须使用@Test注解进行修饰。
  • 测试方法必须使用public void 进行修饰,不能带有任何参数。
  • 测试单元中的每一个方法必须独立测试,每个测试方法之间不能有依赖。
  1. 常用注解

    @Test(excepted=XX.class) 在运行时忽略某个异常。
    @Test(timeout=毫秒) 允许程序运行的时间。
    @Ignore 所修饰的方法被测试器忽略。
    @RunWith 可以修改测试运行器 org.junit.runner.Runner

@ComponentScan 主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中,
装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中

@Component
@Controller
@Service
@Repository

注解分类

  • @Component 是可以用以所有类
  • @Repository一般用于持久层操作数据库上的
  • @Service 一般用于业务逻辑里面的实现类,
  • @Controller 一般是用于控制器上的注解
  • @Bean 一般是跟@Configuration一起用的相当于

说明

  • 虽然Component注解也会当做配置类,但是并不会为其生成CGLIB代理Class。而@Configuration标注的配置类,会通过CGLIB代理Class
  • @Bean就得看所在类是@Component标注,还是@Configuration标注了。
    在配置类的方法间调用时,如果类时@component标注的,每次调用获取的都是新的实体;
    而如果是@configuration标注的话,每次调用返回的是同一个实体Bean,
    @Configuration标注下的@Bean调用函数使用都是代理对象,获取的都是从IOC容器里获取的bean,因此都是同一个
    而@Component标注下的@Bean下只是普通的函数方法调用,因此每次调用后,都是是新的对象
  • 接口 org.springframework.context.ApplicationContext 代表Spring IoC容器,并负责实例化、配置和组装上述beans。容器通过读取配置元数据获取需要实例化、配置和组装的对象的指示信息。配置元数据用XML,Java注解或Java代码表示。它允许你展示组成你的应用程序的对象以及这些对象之间丰富的相互依赖关系。
  • bean定义
属性解释模块说明
class实例化Beans
nameBeans命名
scopeBean作用域
constructorarguments依赖注入
properties依赖注入
autowiringmode自动装配依赖
lazy-initializationmode懒初始化Beans
initializationmethod初始化回调
destructionmethod销毁回调

@ 使用说明

 //ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/bean.xml");// 读取bean.xml中的内容  
 ApplicationContext annotationContext = new AnnotationConfigApplicationContext("SpringStudy");  
ClassName c = annotationContext.getBean("benName", ClassName .class);// 创建bean的引用对象  

@Bean
@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认成为该bean定义的id
如果一个bean的定义依赖其他bean,则直接调用对应JavaConfig类中依赖bean的创建方法就可以了

依赖注入的都是同一个Singleton的对象实例,Spring的参考文档中有说明,即通过拦截配置类的方法调用来避免多次初始化同一类型对象的问题,一旦拥有拦截逻辑的子类发现当前方法没有对应的类型实例时才会去请求父类的同一方法来初始化对象实例,否则直接返回之前的对象实例。

@ComponentScan

@ComponentScan对应XML配置形式中的<context:component-scan>元素,用于配合一些元信息Java Annotation(@Component和@Repository等),将标注了这些元信息Annotation的bean定义类批量采集到Spring的IoC容器中。

我们可以通过basePackages等属性来细粒度地定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。
@ComponentScan是SpringBoot框架魔法得以实现的一个关键组件

@PropertySource与@PropertySources

@PropertySource用于从某些地方加载*.properties文件内容,并将其中的属性加载到IoC容器中,便于填充一些bean定义属性的占位符(placeholder),当然,这需要PropertySourcesPlaceholderConfigurer的配合。

如果我们使用Java 8或者更高版本开发

@Configuration
@PropertySource("classpath:1.properties")
@PropertySource("classpath:2.properties")
@PropertySource("...")
public class XConfiguration{
    ...
}

使用低于Java 8版本的Java开发Spring应用,又想声明多个@PropertySource,则需要借助@PropertySources的帮助了:

@PropertySources({
        @PropertySource("classpath:1.properties"),
        @PropertySource("classpath:2.properties"),
        ...
})
public class XConfiguration{
    ...
}

@Import与@ImportResource

在XML形式的配置中,我们通过的形式将多个分开的容器配置合到一个配置中,在JavaConfig形式的配置中,我们则使用@Import这个Annotation完成同样目的:

@Configuration
@Import(MockConfiguration.class)
public class XConfiguration {
    ...
}

@Import只负责引入JavaConfig形式定义的IoC容器配置,如果有一些遗留的配置或者遗留系统需要以XML形式来配置(比如dubbo框架),我们依然可以通过@ImportResource将它们一起合并到当前JavaConfig配置的容器中:

@Configuration
@Import(MockConfiguration.class)
@ImportResource("...")
public class XConfiguration {
    ...
}

自动配置

SpringBoot 自动配置主要通过 @EnableAutoConfiguration, @Conditional, @EnableConfigurationProperties 或者 @ConfigurationProperties 等几个注解来进行自动配置完成的

  1. @EnableAutoConfiguration
    开启自动配置,主要作用就是调用 Spring-Core 包里的loadFactoryNames(),将 autoconfig 包里的已经写好的自动配置加载进来。
  2. @Conditional 条件注解
    通过判断类路径下有没有相应配置的 jar 包来确定是否加载和自动配置这个类。
  3. @EnableConfigurationProperties
    给自动配置提供具体的配置参数,只需要写在 application.properties 中,就可以通过映射写入配置类的 POJO 属性中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ynchyong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值