您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页同一个@Configuration注解的类里的@Bean注解的bean互相调用

同一个@Configuration注解的类里的@Bean注解的bean互相调用

来源:爱问旅游网

1.准备

Configuration注解类

@Configuration
public class TestConfig {

    @Bean
    public UserBean  userBean(){
        UserBean  ub = new UserBean();
        ub.setId("1");
        ub.setName("test");
        ub.setPassword("123456");

        return  ub;
    }

    @Bean
    public RoleBean  roleBean(UserBean user){
        System.out.println(user);
        RoleBean  roleBean =new RoleBean();
        roleBean.setId(user.getId());
        roleBean.setName(user.getName());
        return  roleBean;
    }

}

实体类UserBean 和  RoleBean

public class RoleBean implements Serializable {
    private String id;
    private String name;
    private Set<PermissionBean> permissions = new HashSet<>();

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<PermissionBean> getPermissions() {
        return permissions;
    }

    public void setPermissions(Set<PermissionBean> permissions) {
        this.permissions = permissions;
    }

    @Override
    public String toString() {
        return "RoleBean{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}
public class UserBean implements Serializable {
    private String id;
    private String name;
    private String password;
    private Set<RoleBean> roles = new HashSet<>();

    public  UserBean(){
        super();
    }
    public UserBean(String id,String name, String password) {
        this.id=id;
        this.name = name;
        this.password = password;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Set<RoleBean> getRole() {
        return roles;
    }

    public void setRole(Set<RoleBean> roles) {
        this.roles = roles;
    }

    @Override
    public String toString() {
        return "UserBean{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

测试

1.Configuration注解类如上时

@RunWith(SpringRunner.class)
@SpringBootTest
public class ShirodemoApplicationTests {

    @Test
    public void test() {
        AnnotationConfigApplicationContext  tx = new AnnotationConfigApplicationContext(TestConfig.class);
        RoleBean roleBean = (RoleBean) tx.getBean("roleBean");
        System.out.println(roleBean);

    }

}

结果:

UserBean{id='1', name='test', password='123456'}
RoleBean{id='1', name='test'}

2.改动Configuration注解类

 

@Configuration
public class TestConfig {

    @Bean
    public UserBean  userBean(){
        UserBean  ub = new UserBean();
        ub.setId("1");
        ub.setName("test");
        ub.setPassword("123456");

        return  ub;
    }
    @Bean
    public UserBean  userBeans(){
        UserBean  ub = new UserBean();
        ub.setId("2");
        ub.setName("test2");
        ub.setPassword("123456");

        return  ub;
    }

    @Bean
    public RoleBean  roleBean(UserBean userBeans){
        System.out.println(userBeans);
        RoleBean  roleBean =new RoleBean();
        roleBean.setId(userBeans.getId());
        roleBean.setName(userBeans.getName());
        return  roleBean;
    }

}

结果:

UserBean{id='2', name='test2', password='123456'}
RoleBean{id='2', name='test2'}

 

测试1和2的结论:当@Bean注解的方法返回的对象唯一(在当前的@configuration中),则直接引用即可此对象即可:

当@Bean注解的方法返回的对象不唯一,则对象的引用决定引用的是哪一个@Bean:

提示:还有几种解决方法(@Bean不唯一)

1.可以用起别名解决

2.或者:使用@Qualifier注解

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务