1. 使用xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.dake.model.Person">
<property name="name" value="zhangsan" ></property>
<property name="age" value="18"></property>
</bean>
</beans>
2.@configuration + @Bean 注解方式
@Configuration
public class UserConfig{
@Bean("user")
public User getUser(){
return new User("張三",18);
}
}
3.通過掃描包注解componentScan
@componentScan 可以掃描包下的@Controller @Service @Repository @Component注解叽粹。
4.使用@import批量導(dǎo)入
當(dāng)引入外部包時需要導(dǎo)入多個bean時就要使用@import批量導(dǎo)入
@Configuration
@Import(Role.class)
public class UserConfig{
@Bean(value = "user")
public user getUser() {
return new User("張三", 18);
}
}
@Import在導(dǎo)入Bean的時候却舀,Bean的名稱是全類名,如果導(dǎo)入多個類的話辆脸,輸入格式是這樣:
@Import({Role.class,Person.class})
除了使用@import注解還可以是實現(xiàn)importSelector接口或ImportBeanDefinitionRegistrar接口
public class MyImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
return new String[]{"com.dake.model.User"};
}
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
/**
* @param annotationMetadata 當(dāng)前類的注解信息
* @param beanDefinitionRegistry BeanDefinotion注冊類
*/
@Override
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
Set<String> annotationTypes = annotationMetadata.getAnnotationTypes();
System.out.println("注解類:" + annotationTypes);
//判斷是容器中是否有User
boolean definition = beanDefinitionRegistry.containsBeanDefinition("com.dake.modle.User");
if (definition ){
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Role.class);
//注冊Role 類名字為role
beanDefinitionRegistry.registerBeanDefinition("role", rootBeanDefinition);
}
}
}
5.實現(xiàn)FactoryBean接口
注入的為getObject方法返回值
public class MyBeanFactory implements FactoryBean<User> {
public User getObject() throws Exception {
return new User();
}
public Class<?> getObjectType() {
return User.class;
}
public boolean isSingleton() {
return true;
}
}