其他分享
首页 > 其他分享> > Spring 使用@Component装配Bean

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