Spring 使用@Component装配Bean
作者:互联网
一、通过扫描装配你的Bean
如果一个个的Bean使用注解@Bean注入Spring IoC容器中,那将是一件很麻烦的事情。好在Spring还允许我们进行扫描装配Bean到IoC容器中,对于扫描装配而言使用的注解是@Component和@ComponentScan。
@Component是标明哪个类被扫描进入Spring IoC容器
@ComponentScan则是标明采用何种策略去扫描装配Bean。
package config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("user")
@Data
public class UserTest {
@Value("1")
private Long id;
@Value("user_name_1")
private String userName;
@Value("note_1")
private String note;
}
注意,这里使用了lo’mbok可以帮忙自动生成get和set方法。如果不熟悉这个插件的可以手动实现get和set方法。
package config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import pojo.User;
@Configuration
@ComponentScan
public class AppConfig {
}
这里加入了@ComponentScan,意味着它会进行扫描,但是它只会扫描类AppConfig所在的当前包和其子包,之前把User.java移到包config就是这个原因。
测试
package config;
import org.apache.catalina.core.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import pojo.User;
public class IoCTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
User user = ctx.getBean(User.class);
System.out.println(user.getId());
}
}
这样就能够运行了。然而为了使得User类能够被扫描,上面我们把它迁移到了本不该放置它的配置包,这样显然就不太合理了。为了更加合理,@ComponentScan还允许我们自定义扫描的包。下面探讨它的配置项。
首先可以通过配置项basePackages定义扫描的包名,在没有定义的情况下,它只会扫描当前包和其子包下的路径;还可以通过basePackageClasses定义扫描的类;其中还有includeFilters和excludeFilters,includeFilters是定义满足过滤器(Filter)条件的Bean才去扫描,excludeFilters则是排除过滤器条件的Bean,它们都需要通过一个注解@Filter去定义,它有一个type类型,这里可以定义为注解或者正则式等类型。classes定义注解类,pattern定义正则式类。
@ComponentScan(basePackages={pojo})
//或者
@ComponentScan(banePackageClasses={User.class})
//或者
@ComponentScan("com.package.example.chapeter22.*")
标签:Spring,Component,扫描,ComponentScan,Bean,User,org,import 来源: https://blog.csdn.net/qq_36412195/article/details/116069906