java中设置自动注入为true_Java方式bean的注入以及自动配置

Java配置

Java配置的本质上,就是使用一个Java类去代替xml配置,这种配置方式在目前最主流的Spring Boot中得到了广泛的使用。

1、引入相关Spring相关依赖

2、创建Java配置类:

/**

* 这是一个Java配置类,它的作用类似于applicationContext.xml配置文件

* @author 叶小陌

*

*/

@Configuration

public class JavaConfig {

/**

* 返回一个JavaBean的方法就类似于applicationContext.xml中的一个bean标签

*

* @return

* 默认情况下,id就是方法名,可以通过@bean注解的value或者name属性自定义方法名

*/

@Bean(name="book")

public Book getBook(){

return new Book();

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

3、加载Java配置

public class Main1 {

ApplicationContext ac;

@Test

public void test() {

Book book = (Book) ac.getBean(Book.class);

System.out.println(book);

}

@Before

public void before(){

ac = new AnnotationConfigApplicationContext(JavaConfig.class);

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

自动配置

xml 配置实现

xml配置,主要通过四个注解,这四个注解,目前来说,功能是一样的:

@Component,一般用在身份不明确的组件上

@Service,一般用在Service层

@controller,一般用在控制层

@Repository,一般用在数据库访问层

然后在xml文件中配置自动扫描:

1

如果有多个包需要扫描,多个包使用“,”隔开,也可以直接配置扫描父包。

还可以配置扫描某个注解,如下:

1

2

3

use-default-filters表示使用使用spring默认提供的过滤器,false表示不使用,true则表示使用。

一般来说,true结合exclude-filter标签使用,表示除去某个注解

false结合include标签使用,表示包含某个注解

注意:Component是另外三个注解(Service、Controller、Repository)的父类。

Java配置实现

Java配置和xml配置基本一致,唯一不同的地方就是包扫描的方式。

四个注解是一样的。

包扫描是通过@ComponentScan来实现:

@Configuration

@ComponentScan("com.sxt.bean")

public class JavaConfig {

}

1

2

3

4

Java配置一样可以实现精确的包扫描:

@Configuration

@ComponentScan(value="com.sxt.bean",useDefaultFilters=false,includeFilters={

@ComponentScan.Filter(type=FilterType.ANNOTATION,value=Service.class)

})

public class JavaConfig {

}

1

2

3

4

5

6

---------------------

### 根据配置文件中的布尔判断是否注入Bean 在Spring框架中,可以通过配置文件中的布尔动态控制Bean注入行为。这可以通过 `@ConditionalOnProperty` 注解实现,该注解允许根据配置文件中的属性决定是否创建某个Bean。 例如,在配置文件 `application.properties` 中定义一个布尔型的属性: ```properties feature.enabled=true ``` 然后,在配置中使用 `@ConditionalOnProperty` 注解控制Bean的创建: ```java @Configuration public class FeatureConfig { @Bean @ConditionalOnProperty(name = "feature.enabled", havingValue = "true") public FeatureService featureService() { return new FeatureServiceImpl(); } } ``` 在上述代码中,`FeatureService` 实例只有在 `feature.enabled` 属性为 `true` 才会被创建并注入到Spring容器中。如果该属性为 `false`,则该Bean不会被加载,从而实现条件注入的效果。 此外,也可以结合 `@Value` 注解读取配置文件中的布尔,并在代码中进行逻辑判断,以决定是否执行某些依赖注入操作: ```java @Component public class ConditionalComponent { @Value("${feature.enabled}") private boolean featureEnabled; @Autowired private FeatureService featureService; public void execute() { if (featureEnabled) { featureService.doSomething(); } else { System.out.println("Feature is disabled."); } } } ``` 在上述代码中,`featureEnabled` 的从配置文件中读取,并用于控制是否调用 `FeatureService` 的方法。这种方式适用于需要在业务逻辑中根据配置动态控制行为的场景[^2]。 ### 结合 `@Conditional` 实现自定义条件注入 除了 `@ConditionalOnProperty` 外,还可以通过实现 `Condition` 接口来自定义条件逻辑。例如: ```java public class CustomCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { return Boolean.parseBoolean(context.getEnvironment().getProperty("feature.enabled")); } } ``` 然后在配置中使用该条件: ```java @Bean @Conditional(CustomCondition.class) public FeatureService customFeatureService() { return new FeatureServiceImpl(); } ``` 通过这种方式,可以更灵活地控制Bean注入逻辑,适用于更复杂的配置场景。 --- ### 相关问题 1. 如何在Spring中实现基于配置的多环境Bean加载? 2. `@ConditionalOnProperty` 和 `@Profile` 的区别是什么? 3. 如何在Spring Boot中根据配置动态加载不同的实现? 4. 使用 `@Value` 和 `@ConfigurationProperties` 注入配置各有什么优缺点? 5. 如何在Spring中实现基于条件的自动装配?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值