首页 > 编程语言 > 详细

(003)spring容器中发布bean,并且注入到容器中其他方法

时间:2019-11-02 18:01:23      阅读:92      评论:0      收藏:0      [点我收藏+]

1、直接在类上添加@Component注解,使其成为一个配置类,但是不能指定初始化和销毁时执行的方法

  User.java

技术分享图片
package com.edu.spring;

import org.springframework.stereotype.Component;

@Component
public class User {

}
View Code

  App.java

技术分享图片
package com.edu.spring;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;


public class App 
{
    public static void main( String[] args )
    {
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(User.class);
        System.out.println(context.getBean(User.class));
        context.close();
    }
}
View Code

  运行结果如下:

技术分享图片

  可以给Component添加属性,指定bean的名字

  User.java

技术分享图片
package com.edu.spring;

import org.springframework.stereotype.Component;

@Component("myUser")
public class User {

}
View Code

  App.java

技术分享图片
package com.edu.spring;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;


public class App 
{
    public static void main( String[] args )
    {
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(User.class);
        System.out.println(context.getBean("myUser"));
        context.close();
    }
}
View Code

  运行结果如下:

技术分享图片

   给bean指定两个名字时,如果用类名获取bean会报错:Exception in thread "main" org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.edu.spring.User] is defined: expected single matching bean but found 2: myUser,createUser。因为该类型的bean有两个,不知道获取哪个。

  User.java

技术分享图片
package com.edu.spring;

import org.springframework.stereotype.Component;

@Component("myUser")
public class User {

}
View Code

  MyConfig.java

技术分享图片
package com.edu.spring;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyConfig {
    
    @Bean
    public User createUser(){
        return new User();
    }
}
View Code

  App.java

技术分享图片
package com.edu.spring;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;


public class App 
{
    public static void main( String[] args )
    {
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(User.class,MyConfig.class);
        System.out.println(context.getBean(User.class));
        context.close();
    }
}
View Code

  运行结果如下:

技术分享图片

技术分享图片

   现在用名字获取一下,发现这是两个bean,如下:

  App.java

技术分享图片
package com.edu.spring;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;


public class App 
{
    public static void main( String[] args )
    {
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(User.class,MyConfig.class);
        System.out.println(context.getBean("myUser"));
        System.out.println(context.getBean("createUser"));
        context.close();
    }
}
View Code

  运行结果如下:

技术分享图片

  使用getBeansOfType可以获取某个类型的所有bean对象,如下:

  App.java

技术分享图片
package com.edu.spring;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;


public class App 
{
    public static void main( String[] args )
    {
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(User.class,MyConfig.class);
        System.out.println(context.getBean("myUser"));
        System.out.println(context.getBean("createUser"));
        System.out.println(context.getBeansOfType(User.class));
        context.close();
    }
}
View Code

  运行结果如下:

技术分享图片

 

 

(003)spring容器中发布bean,并且注入到容器中其他方法

原文:https://www.cnblogs.com/javasl/p/11783305.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!