Spring Boot 注解(1)

启动类注解 @SpringBootApplication

使用@SpringbootApplication注解 能够解决根类或者配置类(我本身的说法,就是main所在类)头上注解过多的问题,一个@SpringbootApplication至关于@Configuration,@EnableAutoConfiguration和 @ComponentScan 并具备他们的默认属性值。java

package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {   
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
 
}

@Configuration 和 @Bean

@Configuration可理解为用spring的时候xml里面的<beans>标签web

@Bean可理解为用spring的时候xml里面的<bean>标签spring

Spring Boot不是spring的增强版,因此@Configuration和@Bean一样能够用在普通的spring项目中,而不是Spring Boot特有的,只是在spring用的时候,注意加上扫包配置数据库

<context:component-scan base-package="com.xxx.xxx" />,普通的spring项目好多注解都须要扫包,才有用,有时候本身注解用的挺6,但不起效果,就要注意这点。springboot

Spring Boot则不须要,主要你保证你的启动Spring Boot main入口,在这些类的上层包就行。函数

@ComponentScan 和 @Configuration

@ComponentScan 若是不设置basePackage的话 默认会扫描包的全部类,因此最好仍是写上basePackage ,减小加载时间。默认扫描**/*.class路径 好比这个注解在com.wuhulala 下面 ,那么会扫描这个包下的全部类还有子包的全部类,好比com.wuhulala.service包的应用spring-boot

@Configuration 表示这个类是一个spring 配置类,通常这里面会定义Bean,会把这个类中bean加载到spring容器中单元测试

@EnableAutoConfiguration

这个注释告诉SpringBoot“猜”你将如何想配置Spring,基于你已经添加jar依赖项。若是spring-boot-starter-web已经添加Tomcat和Spring MVC,这个注释自动将假设您正在开发一个web应用程序并添加相应的spring设置。测试

自动配置被设计用来和“Starters”一块儿更好的工做,但这两个概念并不直接相关。您能够自由挑选starter依赖项之外的jar包,springboot仍将尽力自动配置您的应用程序。ui

@Controller、@Service 、@Repository 和 @Component

  • @Service:用于标注业务层组件。
  • @Controller:用于标注控制层组件(如struts中的action)。
  • @Repository:用于标注数据访问组件,即DAO组件。
  • @Component:泛指组件,当组件很差归类的时候,咱们可使用这个注解进行标注。

@Autowired和@Qualifier

经过上面的配置,Spring已经能够找到对应的Bean,接下来,就是将Bean注入到类中使用,减小get和set方法。减小new。

@Autowired:对类成员变量、方法及构造函数进行标注,完成自动装配的工做。 @Qualifier:指定注入Bean的名称。 @Autowired默认按类型装配(spring),默认状况下要求依赖对象必须存在。若是要容许null值,能够设置它的required属性为false。若是咱们想使用名称装配能够结合@Qualifier注解进行使用。

@Resource J2EE的注解

@Resource:做用等同于@Autowired。 @Resource(J2EE),默认安装名称进行装配,名称默认为属性名。当找不到与名称匹配的bean时才按照类型进行装配。可是须要注意的是,若是name属性一旦指定,就只会按照名称进行装配。 推荐使用:@Resource注解在字段上,这样就不用写setter方法了,而且这个注解是属于J2EE的,减小了与spring的耦合。这样代码看起就比较优雅。

单元测试

进行单元测试的时候须要额外使用如下注解:

  • @RunWith(SpringJUnit4ClassRunner.class):让测试运行于Spring测试环境;
  • @ContextConfiguration(locations={“classpath:…”}):加载对应的配置文件,测试的时候须要本身手动加载配置文件
  • @Transactional:使用事务方式;
  • @TransactionConfiguration(transactionManager = “transactionManager”, defaultRollback = true):事务的配置,事务的名称、是否开启事务回滚。开启回滚后测试数据就不会污染数据库。