【发布时间】:2019-11-14 11:05:50
【问题描述】:
我还在深入学习spring依赖注入。
我的第一个类是配置类,我在其中向容器声明以加载和管理在注释方法中声明的 bean。
package ioc.question_004;
import ioc.commun.Person;
import ioc.commun.Profession;
import org.springframework.context.annotation.*;
@Configuration
public class MyConfiguration {
@Bean
public Profession profession(){
return Profession.builder()
.name("professor")
.description("professor in the university")
.build();
}
@Bean
public Person person(){
return Person.builder()
.name("Bagna")
.age(52)
.profession(profession())
.build();
}
}
我的第二个类是一个 daoRepository,它看起来像:
package ioc.question_008.dao;
import ioc.commun.Person;
import lombok.*;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
@Repository
@Builder
@Setter
@Getter
@EqualsAndHashCode
@ToString
public class MyDaoRepository implements dao {
List<Person> personList = new ArrayList<>();
@Override
public boolean save( Person person ){
return this.personList.add(person);
}
@Override
public boolean delete( Person person ){
return this.personList.remove(person);
}
}
我的运行代码如下:
@Configuration
@Import(MyConfiguration.class)
@ComponentScan(basePackageClasses = {MyDaoRepository.class} )
public class DependencyInjection {
public static void main( String[] args ) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DependencyInjection.class);
dao myDaoRepository = (MyDaoRepository) context.getBean("myDaoRepository");
System.out.println(myDaoRepository);
}
}
MyDaoRepository 神奇地包含在配置类 MyConfiguration 中声明的@Bean 人:
MyDaoRepository(personList=[Person(name=Bagna, age=52,professional=Profession(name=professor, 描述=大学教授))])
我认为容器会自动注入这个对象,即使我没有要求。可能是编译器添加了一些 @Autowired 注释。我不确定。
您能否向我解释一下我如何要求 spring 容器不注入 bean,即使它们存在于容器中(例如 bean 人),除非我要求使用 @Autowired 自己进行注入注解。
【问题讨论】:
-
“包含”它是什么意思?存储库中的列表?
-
是的,列表自动包含在配置类中声明的这个人对象..
-
如果你也告诉Spring(通过组件扫描)自动创建bean本身,你就不能要求Spring不注入bean依赖。如果你想手动控制,不要组件扫描,自己写一个
@Bean方法。 -
可能我的问题并不清楚。 1-我愿意的解决方案是要求依赖注入,但不使用配置类中定义的 person 类型的 bean。(知道包含此配置类对于其他 bean 实例是强制性的,并且删除 @Import 的解决方案将不起作用.) 2-返回我的代码,person对象是如何注入到我的列表中的(构造函数注入、setter方法注入还是字段注入)?
标签: java spring autowired spring-ioc