-
1.
public class DependencyInjectionBean {
private UserService userService;
DependencyInjectionBean1(UserService userService) {
this.userService = userService;
}
@Override
public String toString() {
return "DependencyInjectionBean1{" +
"userService=" + userService +
'}';
}
}
IOC
(Inversion of Control), 控制反轉。如上所示,DependencyInjectionBean擁有UsersService,但沒有spring,DependencyInjectionBean 是需要自己new 一個UserService實例的;有了spring,new UserService交給spring做就好了,至於是用哪個實現類由sping說了算,這樣對於DependencyInjectionBean與UsersService耦合性就沒那麼緊密了。最後UserService的控制就造成了反轉效果。
DI
(Dependency Injection),依賴注入。DependencyInjectionBean依賴於UsersService,而有了spring,spring會自動幫助DependencyInjectionBean注入UsersService,這樣就是依賴注入了。
2. Container可以通過XML-based configuration
, Annotation-based configuration
, Java-based configuration
初始化bean
3. BeanFactory
提供了spring配置框架基本的功能;ApplicationContext
繼承 BeanFactory
了,增加了一些額外的功能(AOP特性,事件傳播等)
4. Bean Scope
包含有:singleton,prototype,request,session,application,其中默認的scope是singleton
,即默認情況下spring生成的bean都是單例
的
5. Liefcycle callback
,配置方式
a. implement InitializingBean interface
b. XML-based configuration
:
<bean id="userService" class="org.zeng.service.UserService" init-method="initBean" destroy-method="destroyBean"/>
c. Java-based configuration
:
@Configuration
public class LearningConfiguration {
@Bean(initMethod = "initBean", destroyMethod = "destroyBean")
public UserService getUserService() {
return new UserServiceImpl();
}
}
d. Annotation-based configuration
:
@Component
public class UserService {
@PostConstruct
public void initBean() {
System.out.println("this is a init-method!");
}
@PreDestroy
public void destroyBean() {
System.out.println("this is a destroy-method!");
}
@Override
public String toString() {
return "instantiating with constructor...";
}
}
6 XML-based configuration
與Annotation-based configuration
spring是都支持的,甚至可以混寫的。但若同時配置同一項配置時,前者的配置會覆蓋後者的配置,即spring會使用XML-based configuration
7. @Autowired
是先匹配類型,再匹配名稱;@Resource
只匹配名稱
8. 如果使用了<context:component-scan>
就沒必要再配置<context:annotation-config>
了,前者已經包含後者
9. @Component
~ @Named
,@Bean
~ @Inject
,@Scope("singleton")
~ @Singleton
前者是Spring的註解,後者是JSR
(Java Specification Requests)的註解
10. customer可以是jvm的property也可以是機器的環境變量
<beans>
<import resource="com/bank/service/${customer}-config.xml"/>
</beans>
11 持續更新...