【細節彙總】IOC Container

    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 configurationAnnotation-based configurationspring是都支持的,甚至可以混寫的。但若同時配置同一項配置時,前者的配置會覆蓋後者的配置,即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 持續更新...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章