JavaConfig常用注解用法汇总

JavaConfig

我们通常使用Spring都会使用xml对Spring进行配置,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置文件以及复杂的Bean依赖关系,使用起来很不方便。

在Spring3.0开始,Spring官方就已经开始推荐使用java配置来代替传统的xml配置了,它允许开发者将bean的定义和Spring的配置编写到到Java类中,不过似乎在国内并未推广盛行。当SpringBoot来临,人们才慢慢认识到java配置的优雅,但是,也仍然允许使用经典的XML方式来定义bean和配置spring。

JavaConfig注解用法汇总

JavaConfig配置IoC/DI

@Configuration

在类上贴该注解表示该类是Spring的配置类, 具有applicationContext.xml文件的作用

@Bean

在Spring的配置类的方法上贴该注解后, 该方法返回的对象会交给Spring容器管理,替代applicationContext.xml中的bean标签

@Bean注解中的属性

在xml配置bean的方式中,我们可以在bean标签中的id,name,init-method,destroy-method,scope等属性来完成对应的配置,在使用JavaConfig方式中我们也一样能通过相应的配置来完成同样的效果,这些效果大多封装到@Bean注解的属性中

@Bean注解中的属性
name: 对应bean标签中的name属性,用于给bean取别名
initMethod: 对应bean标签中的init-method属性,配置bean的初始化方法
destroyMethod: 对应bean标签中的destroy-method属性,配置bean的销毁方法
注意: 在配置类的方式中有许多的默认规定,比如:
bean的id就是当前方法名
配置多例则是在方法上添加@Scope(“prototype”)注解来实现,一般不用配,默认单例即可

@Scope

@Scope注解是springIoc容器中的一个作用域,在 Spring IoC 容器中具有以下几种作用域:基本作用域singleton(单例)prototype(多例),Web 作用域(reqeust、session、globalsession),自定义作用域。

a.singleton单例模式 – 全局有且仅有一个实例
b.prototype原型模式 – 每次获取Bean的时候会有一个新的实例
c.request – request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
d.session – session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
e.globalsession – global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义

@ComponentScan

在Spring配置类上贴该注解表示开启组件扫描器,默认扫描当前配置类所在的包,也可以自己指定,替代xml配置中的<context:component-scan />标签

实例
  1. 定义一个配置类,替代之前的XML文件,类中定义方法,返回bean对象交给Spring管理
/**
 * @Configuration
 * 贴有该注解的类表示Spring的配置类
 * 用于替代传统的applicationContext.xml
 */
@Configuration
public class JavaConfig { 
    
    /**
     * @Bean
     * 该注解贴在配置类的方法上,该方法会被Spring容器自动调用
     * 并且返回的对象交给Spring管理
     * 相当于<bean id="someBean" class="cn.wolfcode.common.SomeBean"/>
     */
    @Bean
    public SomeBean someBean() {
        return new SomeBean();
    }
}
  1. 加载配置类,启动AnnotationConfigApplicationContext容器对象,测试效果
public class App {
    @Test
    public void testJavaConfig() {
        //1:加载配置类,创建Spring容器
        ApplicationContext ctx = 
            new AnnotationConfigApplicationContext(JavaConfig.class);
        //2:从容器中取出SomeBean对象
        SomeBean someBean = ctx.getBean(SomeBean.class);
        System.out.println(someBean);
    }
}
@Controller 控制器(注入服务)

用于标注控制层组件(如struts中的action)

@Service 服务(注入dao)

用于标注业务层组件

@Repository (实现dao访问)

用于标注数据访问组件,即DAO组件.

@Component

把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>,泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

JavaConfig配置导入

@Import

@Import(OtherConfig.class) :配置类与配置类间的引入注解。将指定的配置类,导入到当前配置类。等价于<import resource="applicationContext-web.xml" />

@ImportResource

ImportResources(locations="classpath:applicationContext.xml") :配置文件与配置类间引入注解,将指定配置文件,导入到当前配置类。

@PropertySource

从指定位置加装资源文件到Spring容器的环境变量对象中

@Value

单个参数获取

通过@Value将外部配置文件的值动态注入到Bean中。配置文件主要有两类:

  • application.properties。application.properties在spring boot启动时默认加载此文件
  • 自定义属性文件。自定义属性文件通过@PropertySource加载。@PropertySource可以同时加载多个文件,也可以加载单个文件。如果相同第一个属性文件和第二属性文件存在相同key,则最后一个属性文件里的key启作用。
@ConfigurationProperties

批量参数获取,通过@ConfigurationProperties(prefix = "propbind")的prefix前缀属性获取。

案例

资源文件的导入

<think>我们正在讨论Spring Boot注解的使用。根据引用内容,@SpringBootApplication是一个核心注解,它等价于同时使用@Configuration、@EnableAutoConfiguration和@ComponentScan三个注解。此外,还有其他常用注解如@ConfigurationProperties用于外部配置绑定。接下来,我将详细介绍SpringBoot常用注解的使用方法,并按照功能分类进行说明。</think>### Spring Boot 注解使用指南 Spring Boot 的核心注解简化了 Spring 应用的配置过程,以下是关键注解的详细说明: #### 一、核心启动注解 1. **@SpringBootApplication** 等价于 `@Configuration + @EnableAutoConfiguration + @ComponentScan` 的组合: - `@Configuration`:标记为配置类 - `@EnableAutoConfiguration`:启用自动配置机制 - `@ComponentScan`:自动扫描当前包及子包的组件 ```java @SpringBootApplication // 启动类必须添加 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` #### 二、Bean 定义注解 2. **@Bean** 在配置类中声明 Spring Bean: ```java @Configuration public class AppConfig { @Bean public DataSource dataSource() { return new HikariDataSource(); } } ``` 3. **@Component / @Service / @Repository / @Controller** 组件扫描自动注册 Bean: - `@Component`:通用组件 - `@Service`:业务逻辑层 - `@Repository`:数据访问层 - `@Controller`:Web 控制层 #### 三、配置属性绑定 4. **@ConfigurationProperties** 将配置文件属性绑定到 Java 对象: ```java @Component @ConfigurationProperties(prefix = "database") // 绑定 application.yml 的 database.* 属性 public class DatabaseConfig { private String url; private int port; // Getter/Setter 必需 } ``` 支持 JSR-303 校验(需添加 `spring-boot-starter-validation`): ```java @NotNull private String url; ``` #### 四、依赖注入注解 5. **@Autowired** 自动注入依赖(构造函数注入推荐): ```java @Service public class UserService { private final UserRepository repo; @Autowired // Spring 4.3+ 可省略 public UserService(UserRepository repo) { this.repo = repo; } } ``` 6. **@Qualifier** 解决多个同类型 Bean 的歧义: ```java @Autowired @Qualifier("mysqlDataSource") private DataSource dataSource; ``` #### 五、Web 开发注解 7. **@RestController** 组合 `@Controller + @ResponseBody`,直接返回 JSON: ```java @RestController public class UserController { @GetMapping("/users") public List<User> getUsers() { return userService.findAll(); } } ``` 8. **@RequestMapping / @GetMapping / @PostMapping** 定义 API 端点: ```java @PostMapping("/users") public ResponseEntity createUser(@RequestBody User user) { // ... } ``` #### 六、条件化配置 9. **@ConditionalOnProperty** 根据配置决定是否创建 Bean: ```java @Bean @ConditionalOnProperty(name = "cache.enabled", havingValue = "true") public CacheManager cacheManager() { return new RedisCacheManager(); } ``` #### 七、包扫描控制 10. **自定义扫描路径** ```java @SpringBootApplication @ComponentScan(basePackages = "com.example.web") // 指定扫描包 public class Application { ... } ``` > **最佳实践建议**: > - 优先使用 `@SpringBootApplication` 简化启动类配置 > - 配置文件绑定推荐使用 `@ConfigurationProperties` 而非 `@Value` > - 自动注入依赖时尽量采用构造函数方式(保证不可变性) > - 生产环境可通过 `@Profile("prod")` 隔离环境特定配置 [^1]: Spring Boot 常用注解汇总 [^2]: Spring Boot 包扫描配置 [^3]: 配置属性校验机制 [^4]: AOP 相关注解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小云很优秀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值