Spring 注解

1. Spring 相关

@Autowired

  • 用于方法、属性之上

  • 由Spring的依赖注入工具(BeanPostProcessor、BeanFactoryPostProcessor)自动注入

  • @Inject(JSR-330 提供) 类似。

@Bean

  • 用于 @Configuration 的类中的 method

  • 告诉 IoC Container,这个方法的返回对象是一个 Bean

@Component

  • 用于 class

  • 告诉 IoC Container,这个类是一个 Bean

  • 可与 @Scope("prototype"), @Lazy 等组合使用

  • @Controller, @Service, @Repository 是一种特殊标记的 Component,与 @Component 本质是一样的。

@Configuration

  • Use @Configuration annotation on top of any class to declare that this class provides one or more @Bean methods and may be processed by the Spring container to generate bean definitions and service requests for those beans at runtime.

  • 适用于 Class

  • 表明这是一个配置类,类内部可以定义 @Bean

  • 例子

@Configuration
public class AppConfig {

    @Bean
    public Bean1 bean1() {
        return new Bean1();
    }
}

// 单独加载 Annotation Context
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
Bean1 bean1 = context.getBean("bean1", Bean1.class);
1
2
3
4
5
6
7
8
9
10
11
12

@ConfigurationProperties

有如下 application.properties

#App
app.menus[0].title=Home
app.menus[0].name=Home
app.menus[0].path=/
app.menus[1].title=Login
app.menus[1].name=Login
app.menus[1].path=/login

app.compiler.timeout=5
app.compiler.output-folder=/temp/

app.error=/error/
1
2
3
4
5
6
7
8
9
10
11
12

可使用下面这种方式获取其值:

@Component
@ConfigurationProperties("app")
public class AppProperties {

    public String error;
    public List<Menu> menus = new ArrayList<>();
    public Compiler compiler = new Compiler();

    public static class Menu {
        public String name;
        public String path;
        public String title;
    }

    public static class Compiler {
        public String timeout;
        public String outputFolder;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

@EnableConfigurationProperties 注解表示对 @ConfigurationProperties 的内嵌支持,默认会将对应 Properties Class 作为 bean 注入到 IoC 容器中,即在相应的 Properties 类上不用加 @Component 注解。

@Import

@Configuration
public class MoonBookConfiguration {
    @Bean
    public BookService bookService() {
        return new BookServiceImpl();
    }
}

// 可以同时导入多个配置类,比如:@Import({A.class,B.class})
// 也可以导入普通类,作为 Bean 注册到容器
@Configuration
@Import(MoonBookConfiguration.class)
public class MoonUserConfiguration {
    @Bean
    public UserService userService(BookService bookService) {
        return new BookServiceImpl(bookService);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

@PostConstruct

  • 用于 Bean 的某个方法

  • 在 Bean 创建之后自动执行

@PreDestory

  • 用于 Bean 的某个方法

  • 在 Bean 销毁之前自动执行

@Value

2. 切面相关

@Aspect

@After

@Before

@Around

@PointCut

3. 环境相关

@Profile

  • 通过设定 Environment 的 ActiveProfiles 来设定当前 context 需要使用的配置环境

@Conditional

4. @Enable*

@EnableAspectJAutoProxy

  • 开启对AspectJ自动代理的支持

@EnableAsync

  • 开启异步方法的支持

@EnableScheduling

  • 开启计划任务的支持

@EnableWebMvc

  • 开启Web MVC的配置支持

@EnableConfigurationProperties

  • 开启对@ConfigurationProperties注解配置Bean的支持

@EnableJpaRepositories

  • 开启对SpringData JPA Repository的支持

@EnableTransactionManagement

  • 开启注解式事务的支持

@EnableCaching

  • 开启注解式的缓存支持

5. Spring MVC 相关

@RequestMapping

@ResponseBody

@RequestBody

@PathVariable

@RestController

@ControllerAdvice

@ExceptionHandler

5. Spring JPA 相关

@GeneratedValue

@GeneratedValue(strategy = GenerationType.IDENTITY)
1

@Query

自定义查询

@Modifing

当需要修改数据时,需要加 @Modifing

@Modifying
@Query("update User u set u.firstname = ?1 where u.lastname = ?2")
int setFixedFirstnameFor(String firstname, String lastname);
1
2
3

@Transactional

  • 默认情况下的 Repository 实例都是 Transactional 的

  • 自己实现的操作,需要加 @Transactional,一般是在 Service 层面


@Service
class UserManagementImpl implements UserManagement {
  
  @Autowired
  private final UserRepository userRepository;

  @Autowired
  private final RoleRepository roleRepository;

  @Transactional
  public void addRoleToAllUsers(String roleName) {

    Role role = roleRepository.findByName(roleName);

    for (User user: userRepository.findAll()) {
      user.addRole(role);
      userRepository.save(user);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

5. Spring Security 相关

最近更新: 8/14/2019, 5:35:25 PM