Spring5 Java代码装配Bean

Posted 冰点IT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring5 Java代码装配Bean相关的知识,希望对你有一定的参考价值。

       接着上次自动化装配Bean,这次我们来探讨Java代码装配Bean。一般情况下Spring提供的自动装配Bean功能已经能满足绝大多数场景的需求,但是如果我们需要整合第三方框架,这个时候是无法使用@Component和@Autowired注解进行自动装配的。那么这种情况下,我们只能选择Java代码或者XML的显式配置。

1、Java代码装配Bean

1.1、创建一个配置类JavaConfigBean

@Configurationpublic class JavaConfigBean {}

@Configuration注解表明这个类是一个配置类,该类包含有Spring应用上下文中如何创建Bean的引导。

1.2、声明一个简单的Bean

public class Blog { public void sayHello() { System.out.println("***************hello world!****************"); }}public class User { public void getUser() { System.out.println("*********我是icypt************"); }}

这两个类都是简单的Java类,没有做任何个性化的处理,那么如何来通过Java代码将其声明成一个Bean交由Spring管理呢?

@Configurationpublic class JavaConfigBean { @Bean public Blog get Blog () { return new Blog (); }}


@Bean:此注解会告诉Spring将注册方法返回的实例做为一个Bean注册到Spring容器中,默认情况下BeanID为注册方法名。

那么如何自定义BeanID呢?

@Bean("blogUser")public User getUser() { return new User();}

此时我们定义的User这个Bean的ID就是“blogUser”。

编写测试类

public class TestJavaConfigBean {private static AnnotationConfigApplicationContext acac = new AnnotationConfigApplicationContext(JavaConfigBean.class); @Test public void createBean() { Blog blog = acac.getBean("getBlog", Blog.class); blog.sayHello(); User user = acac.getBean("blogUser", User.class); user.getUser(); }}

运行结果

14:07:40,691 DEBUG main support.DefaultListableBeanFactory:213 - Creating shared instance of singleton bean 'getBlog'14:07:40,727 DEBUG main support.DefaultListableBeanFactory:213 - Creating shared instance of singleton bean 'blogUser'***************hello world!*************************我是icypt************

运行结果表明我们已经通过Java代码成功的声明了两个bean并完成了方法调用。

1.3、使用Java代码配置完成依赖注入

以上的demo只是完成了一个简单Java类的Bean声明,但是在实际开发中,由于其业务的复杂性,一个Bean不足以支撑起整个业务功能,通常情况下都是有各个Bean相互协作共同来完成,下面我们来探讨如何使用Java代码配置完成依赖注入。

public class Blog { private User user; public Blog() {} public Blog(User user) { this.user = user; } public void setUser(User user) { this.user = user; } public void sayHello() { System.out.println("***************hello world!****************"); } public void getUser() { user.getUser(); }}

可以看出博客这个类需要依赖我们的用户类,下面我们来看Java代码配置时依赖注入的几中方式。

@Configurationpublic class JavaConfigBean { @Bean public Blog getBlog() { return new Blog(); } @Bean("blogUser") public User getUser() { return new User(); } //通过构造方法注入方式1 @Bean public Blog conBlog() { return new Blog(getUser()); } //通过构造方法注入方式2,常用 @Bean public Blog conBlogParams(User blogUser) { return new Blog(blogUser); } //通过Setter方法注入方式1 @Bean public Blog setBlog() { Blog blog = new Blog(); blog.setUser(getUser()); return blog; } //通过Setter方法注入方式2,常用 @Bean public Blog setBlogParams(User user) { Blog blog = new Blog(); blog.setUser(user); return blog; }}

上面这段代码展示了我们在开发中常用的两种依赖注入方式,要么基于Setter方法要么基于Construct方法,需要说明的是在以上配置类中使用getUser()时,并不是真正意义上创建了一个User实例,而是获得了这个Bean的ID,因为在Spring中每个Bean默认都是单例的,只需要在装配时实例化一次,而后传递其引用完成依赖注入,由于比较简单就不贴测试代码了。


关注我

冰点IT,探索最新开发技术,记录追求梦想的点点滴滴!


    长按二维码,或点击最上方蓝色的 冰点IT 关注我,您的关注是对我最好的鼓励!

以上是关于Spring5 Java代码装配Bean的主要内容,如果未能解决你的问题,请参考以下文章

Spring5 解决Bean在自动装配时的歧义性

Spring5Bean 的自动装配及注解开发

Java Spring5之IOC容器

Spring5 XML装配Bean

Spring5 条件化的Bean装配之Conditional的使用

[Spring5]IOC容器_Bean管理XML方式_自动装配