先看一个最简单的例子,

SpringBoot—bean的装配
SpringBoot—bean的装配

SpringBoot—bean的装配

@Configuration戴表AppConfig是一个java配置文件,SPring容器会根据它来生成Ioc容器去装配bean,@Bean代表将initUser方法返回的pojo装配到Ioc容器中,而其属性name定义这个bean的名称,如果没有配置它,则将方法名称initUser作为Bean的名称保存到容器中。

如果一个个的Bean使用注解@Bean注入到容器中,那将是一件很麻烦的事儿,Spring允许我们进行扫描装配bean到容器中。对于扫描装配而言使用的注解是@Component和@ComponentScan @Component标明哪个类被扫描进容器中,@ComponentScan标明采取何种策略去装配Bean。

这里我们首先把代码User.java移到包com.example.demo.config内,然后对其
进行修改,如代码清单3-5所示。

package com.example.demo.config;
@Component (“user”)
public class User
@Value (“1”)
private Long id;
@Value (“user_ name_ 1”)
private String username;
@Value (“note_ 1”)
private String password;
/**setter and getter **/

这里的注解@Component表明这个类将被Spring IoC容器扫描装配,其中配置的“user”则是作为Bean的名称,当然你也可以不配置这个字符串,那么IoC容器就会把类名第-一个字母作为小写,其他不变作为Bean名称放入到IoC容器中;注解@Value则是指定具体的值,使得Spring IoC给予对应的属性注入对应的值。为了让Spring IoC容器装配这个类,需要改造类AppConfig,
package com. example.demo.config;
import org. springf ramework. context. annotation. ComponentScan;
import org. springf r amework. context. annotation.Configuration;
@Configuration
@ComponentScan
public class AppConfig {
}
送里加入了@ComponentScan,意味着它会迸行扣描,但是它只会扫描类AppConfig所在的当前包和其子包,之前把User.java移到包com. example.demo.config就是这个原因。这样就可以删掉之前使用@Bean标注的创建对象方法。然而为了使得User类能够被扫描,上面我们把它迁移到 了本不该放置它的配置包,这样显然就不太合理了。为了更加合理,@ComponentScan还允许我们自定义扫描的包。下面探讨它的配置项。

我们再把USer放回原来的包,并把AppConfig的注解修改为
@ComponentScan(“com.example.demo”)就能被正常扫描,但是假如我们新建一个UserService类,
SpringBoot—bean的装配

那么Service会和User一起被扫描,当我们不想它被扫描时,我们可以使用如**解
package com. example.demo.config;
import org. springf ramework. context. annotation. ComponentScan;
import org. springf r amework. context. annotation.Configuration;
@Configuration
@ComponentScan(excludeFilters={@Filter( classes=Service.class)})
public class AppConfig {
}

相关文章: