注解概括
Configuration注解
被@Configuration所注解的类会被Spring认定为配置类,它可以和@Bean注解连用,向容器中注入bean对象。
Bean注解
在被@Configuration注解的类中的方法上注解上@Bean,被注解方法所返回的对象将加入到Spring容器的管理,同时方法的名字将作为该bean的默认名称即id。如果想自定义名称,可以给@Bean的value属性赋值想要的名称。
代码演示
以下代码使用@Configuration和@Bean想Spring容器注入bean对象。
新建实体类User.java
package cc.fireflyhut.study.entity;
public class User {
private String username;
private String password;
public User() {}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
新建配置类MyConfig.java
package cc.fireflyhut.study.config;
import cc.fireflyhut.study.entity.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyConfig {
/**
* 向容器中注册一个id未user类型为User的Bean
* 该Bean的id默认为方法名(user)如果想指定id,需要在@Bean注解中传入value值指定id
*/
@Bean
public User user() {
return new User("admin", "123456");
}
/**
* 指定注册到容器中的bean的id为user111
*/
@Bean("user111")
public User user1() {
return new User("admin", "123456");
}
}
新建测试主类MyTest.java
package cc.fireflyhut.study;
import cc.fireflyhut.study.config.MyConfig;
import cc.fireflyhut.study.entity.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MyTest {
public static void main(String[] args) {
// 获得注解配置容器类
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MyConfig.class);
// 从容器中获得指定id的bean
User user = (User)applicationContext.getBean("user111");
System.out.println(user);
// 从容器中获得所有指定类型的bean的名字即id
String[] beanNames = applicationContext.getBeanNamesForType(User.class);
// 遍历打印id
for (String beanName : beanNames) {
System.out.println(beanName);
}
}
}
打印结果