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

您所在的位置:网站首页 jsp如何调用javabean中某一类的方法 同一个@Configuration注解的类里的@Bean注解的bean互相调用

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

2024-07-11 16:36| 来源: 网络整理| 查看: 265

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 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 getPermissions() { return permissions; } public void setPermissions(Set 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 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 getRole() { return roles; } public void setRole(Set 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 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3