IOC思想:實(shí)現(xiàn)對象的控制反轉(zhuǎn)(由框架控制對象)將對象的控制權(quán)移交給框架。
對于初學(xué)者來講,對資源的控制很難達(dá)到非常高的標(biāo)準(zhǔn),由高級的設(shè)計人員完成這件事情就可以了。
IOC核心(思想的實(shí)現(xiàn))-最核心的部件:
工廠:構(gòu)建對象
容器:存儲對象
注入:實(shí)現(xiàn)對象依賴關(guān)系的設(shè)置
IOC技術(shù)的實(shí)現(xiàn)(套路或模式):
1.反射(動態(tài)操作數(shù)據(jù))+XML(描述數(shù)據(jù))
2.反射(動態(tài)操作數(shù)據(jù))+注解(描述數(shù)據(jù))
Spring中的工廠
我們用ClassPathXmlApplicationContext或者用annotation注解的方式AnnotationConfigApplicationContext初始化xml,這些類都實(shí)現(xiàn)了ApplicationContext接口,ApplicationContext又繼承了ListableBeanFactory,ListableBeanFactory又繼承了BeanFactory接口,BeanFactory的理念是創(chuàng)建Bean對象的工廠,Context的上文是工廠,下文是容器,工廠創(chuàng)建對象,創(chuàng)建的對象放在容器,容器是map
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher, ResourcePatternResolver {}
public interface ListableBeanFactory extends BeanFactory {}
package org.springframework.beans.factory;
import org.springframework.beans.BeansException;
import org.springframework.core.ResolvableType;
public interface BeanFactory {
String FACTORY_BEAN_PREFIX = "&";
Object getBean(String name) throws BeansException;
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType) throws BeansException;
Object getBean(String name, Object... args) throws BeansException;
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
boolean containsBean(String name);
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
String[] getAliases(String name);
}
現(xiàn)階段的程序員是消費(fèi)者
生產(chǎn)者是IOC,創(chuàng)建對象,通過容器注入給消費(fèi)者
誰用注入給誰
IOC基礎(chǔ):一個對象如何由Spring容器去創(chuàng)建,一個對象如何由spring容器去控制它的作用域,去控制它的生命周期,去實(shí)現(xiàn)對象的延時加載
IOC進(jìn)階:如何使用Spring的IOC為對象的屬性注入值:基本類型(直接量)值的注入,集合類型值的注入,對象類型值的注入
IOC高級:注解方式實(shí)現(xiàn)IOC的思想
springIOC整合druid:因?yàn)閐ruid在高并發(fā)情況下應(yīng)用的非常完美
springIOC整合MyBatis,基于xml方式的整合和基于注解方式的整合
<bean class=" ">
@Controller
Class SysLogController{}