1、直接在类上添加@Component注解,使其成为一个配置类,但是不能指定初始化和销毁时执行的方法
User.java
package com.edu.spring; import org.springframework.stereotype.Component; @Component public class User { }
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(); } }
运行结果如下:
可以给Component添加属性,指定bean的名字
User.java
package com.edu.spring; import org.springframework.stereotype.Component; @Component("myUser") public class User { }
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(); } }
运行结果如下:
给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 { }
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(); } }
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(); } }
运行结果如下:
现在用名字获取一下,发现这是两个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(); } }
运行结果如下:
使用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(); } }
运行结果如下:
(003)spring容器中发布bean,并且注入到容器中其他方法
原文:https://www.cnblogs.com/javasl/p/11783305.html