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
运行结果如下:
来源: http://www.bubuko.com/infodetail-3269681.html