Spring in Action(一) Core Spring:Wiring Beans

Spring的核心是dependency injection (DI) and aspect-oriented programming (AOP).

第一章概览一下什么是Spring,以及DI和AOP是怎么解耦(decoupling )应用组件的。

第二章讲模块、bean怎么连接起来,我们会了解spring提供的三种配置方式:自动配置,基于java的配置和用xml配置。【wiring beans,不清楚标准翻译法,暂翻译为连接,装配,反正大概就是这个意思】

第三章延续第二章讲一些高级的技术技巧,包括带有特定条件的配置,自动装配时的歧义处理,域,以及Spring表达式语言。【Spring Expression Language)】

第四章讲Spring的AOP如何解耦全路服务(比如安全控制及审计)decouple system-wide services (such as security and auditing)  】


 2.1 三种查找搜索bean的方法:xml,java和自动,spring in action推荐的选择优先级是自动>java>xml,java比xml多了类型安全性,xml有某些功能java还不能替代。

2.2 自动装配

2.2.1 创建能被自动搜索的bean

类上加一个@Component注解就表示这个类可被搜索。但是搜索不搜索这件事是两厢情愿才行,java的作为Configuration的类加上@ComponentScan,或者作为配置的xml里加一个<context:component-scan> ,都可以指定一个包,这个包内极其下面的所有包的可搜索的类都被搜出来。

测试时如果注解@RunWith(SpringJUnit4ClassRunner .class)spring会自动创建一个application context,用@ContextConfiguration 来指定这个配置,当然这个配置可以是java类,也可以是xml。@Autowired 的属性会自动地被content创建出来并赋值。

2.2.2 命名bean:默认的名字是类名首字母变小写。@Named约等于@Component可以传一个String为这个bean赋值一个id(可从BeanNameAware的方法参数传递给Bean)。

2.2.3 自动装配的base package:@ComponentScan(basePackages={"soundsystem", "video"}) @ComponentScan(basePackageClasses={CDPlayer.class, DVDPlayer.class}) 

2.2.4自动装配@Autowired约等于@Inject

2.2.5.new StandardOutputStreamLog(); 用来获取system.out的字符串。@Rule注解实例,用getLog()来获取system.out的信息。注意println有一个换行,注意windows下的换行是"\r\n"。

目前为止我们只有通过type来获取bean这一种方式,同一个接口的两个实例同时存在,并且spring无法区分时会报错。【todo:自动装配的多种方式】【todo:辨析几个注解】

 

2.3 java装配方式

用@Bean来注解一个方法,方法返回一个抽象接口或类,可以有一个参数作为id,这种方法很灵活,可以在代码里写很多逻辑。

java方式装配时,如果需要用到另外一个bean,则需要用其对应的带有@Bean注解的方法调用来装配,spring会自动识别并且保证bean实例是同一个。

 

2.4 xml装配方式

2.5混合模式

2.5.1 config类通过@import加载别的configs,通过@ImportResource 加载别的xml,xml中通过import标签导入其他xml,通过bean标签导入config【todo:图解spring装配】

posted @ 2017-06-16 15:12  剑侠飞蓬  阅读(227)  评论(1编辑  收藏  举报