我从未见过自动收集的集合:
@Around("execution(public void getPersonCount())")
public void thirdAdvice(final ProceedingJoinPoint joinPoint) throws Throwable
{
final int numberOfArguments = joinPoint.getArgs().length;
final String functionName = joinPoint.getSignature().getName();
System.out.println("Number of arguments = " + numberOfArguments);
System.out.println("Function name = " + functionName);
joinPoint.proceed();
}
在init()方法中,我可以看到foos已经有几个条目了。我猜Spring知道谁应该成为foos的入口。但是,怎么样?如果我想将Foo对象添加到foos中,我该怎么办?需要在属性文件中配置,还是任何其他想法?
答案 0 :(得分:5)
Spring的BeanFactory基本上是bean的注册表。这些bean可以使用XML声明,也可以使用Configuration类中的@Bean
- 带注释的方法声明,或者使用包扫描自动发现。
当你要求List<Foo>
时,Spring会找到所有类型为Foo的bean,创建一个包含这些bean的List,并注入该列表。
documentation about Autowired解释了它,BTW:
通过将注释添加到需要该类型数组的字段或方法,也可以从ApplicationContext提供特定类型的所有bean
答案 1 :(得分:0)
在init()方法中,我可以看到foos已经有几个条目。我想Spring知道谁应该是foos的入口。但是,如何?
在创建应用程序上下文/ Bean工厂时,默认情况下为(如果未另行指定,则使用惰性初始化或非单例作用域),还将创建所有Bean。 应用上下文了解这些bean 。因此,当我们尝试@Autowire
个private List<Foo> foos;
之类的特定类型bean的集合时,Spring会找到所有foo,将它们添加到列表中并注入到依赖bean中。
如果我要将Foo对象添加到foos中该怎么办?是否需要在属性文件或其他任何想法中进行配置?
有多种方法可以做到这一点。可以根据需要选择一个合适的选项。
XML
文件中声明bean。灵活。但是您可能不喜欢使用XML进行操作。@Component
注释。 Spring将在配置了组件扫描的情况下扫描该类。没有XML,但灵活性较差。 Bean类的定义和声明紧密耦合。无法在其他@Component
中创建Application Context
bean。@Bean
批注,该批注将在 @Configuration
带注释的类中返回bean。最好。 Bean类的定义和声明仅通过批注解耦并完成。我们也可以通过不同的@Bean
中的方法创建Application Context
带注释的bean。