1.Spring是一个开源的,轻量级的,非侵入性的框架
2.Spring中的IOC(inversion of control)
1.控制反转(IOC):他是一种编程思想
2.控制的具体实现:由原来的传统的应用程序自身来创建对象,转变为由Spring容器来创建对象,降低了各个类之间的耦合,增加了代码的扩展性
3.反转的具体实现:创建对象权限由原来的应用程序转变为spring容器,实现反转
4.控制反转的实现:是由IOC容器来实现的,利用spring的核心容器Beans提供的BeanFacotry来创建我们定义好的Bean
5.控制反转别名:依赖注入(DI)Dependency in jection,换个角度理解控制反转
6.控制反转在创建对象时,对象的属性是由spring容器来设置的
7.BeanFacotry是一个基于工厂模式的一个接口,ClassPathXMLApplicationContext就是这个接口的实现类
8.spring里面使用了很多种设计模式,最顶层的就是工厂模式,接下来就是代理模式
9.ClassPathXMLApplicationContext是用来解析xml配置文件,并使用BeanFactory来创建xml配置文件中配置被Bean对象,可以返回一个BeanFactory类型,因为他是 ·BeanFacotry的实现类、
10,例子:吃饭:我们原来要自己做饭吃,现在我们可以点外卖来吃饭,满足需求
11.一句话概括IOC:对象的创建,管理,装配全部由spring容器来完成
12.IOC创建对象的方式:
1.根据我们类的无参构造方法来创建,直接在spring.xml文件中配置Bean对象
2.根据我们类的有参构造方法来创建:
1.需要在xml配置文件中配置的Bean对象中配置<constructor-args index="0" value="mike">,index代表有参构造方法中的参数下标,从0开始,value表示对应下标的值
2.也可以配置<constructor-args name="lisi" value="mike">,这里name表示参数名称
3.也可以配置<constructor-args type="java.lang.String" value="mike">,tyep这里代表的是我们的参数类型
3.使用工厂来创建对象(静态工厂):使用static修饰
1.创建生产对象的Factory:
public static IocDemo getInstance(String name){ return new IocDemo(name); }
2.配置文件里面配置:
<bean id="name" class="com.ioc.demo.UserFactory" factory-method="getInstance"> <constructor-arg index="0" value="张三"></constructor-arg> </bean>3.动态工厂:
1.创建一个动态工厂:
public IocDemo getInstance(String name){ return new IocDemo(name); }2.spring.xml配置:
<bean id="userFactory" class="com.ioc.demo.UserDongFactory"></bean> <bean id="name" factory-bean="userFactory" factory-method="getInstance"> <constructor-arg index="0" value="张三"></constructor-arg> </bean>换个角度理解IOC:依赖注入(Dependency injection):
1.依赖:Bean对象的创建依赖于Spring容器,Bean对象依赖的资源
2.注入:Bean对象依赖的资源由Spring容器进行装配
3.有参构造方法注入(无参构造方法不能进行注入)
4.Setter注入:
1.要求:
1.Bean对象所依赖的属性必须有Setter方法
2.格式必须是set+首字母大写的属性名称
2.注意:
1.boolean类型的属性有setter方法,没有getter方法,而是is方法
3.注入方式:
1.常量注入:只是普通的通过配置Bean对象和对象所依赖的属性
2.Bean注入:一个Bean对象要引用另一个Bean对象,被引用的对象要先创建
3.数组注入:一个Bean对象里面依赖的属性是一个数组,这时候我们要配置多个值
<bean id="name" class="com.ioc.demo.IocDemo"><property name="name" value="mike"></property><property name="books"><array><value>傲慢与偏见</value><value>西游记</value><value>夏仲夜之梦</value></array></property></bean>
4.list注入:一个Bean对象里面依赖的属性是一个数组,这时候我们要配置多个值
<property name="hobbies">
<list>
<value>听音乐</value>
<value>跳舞</value>
<value>羽毛球</value>
</list>
</property>5.Map注入:
<property name="cards">
<map>
<entry key="中国银行" value="123"></entry>
<entry>
<key><value>建设银行</value></key>
<value>456</value>
</entry>
</map>
</property>6.Set注入:
<property name="phone">
<set>
<value>123456</value>
<value>456789</value>
</set>
</property>7.Null注入:
<property name="wife">
<null></null>
</property>8.Properties注入:properties类继承了HashTable,以键值对的形式存储数据,不允许存储相同的键,但可以存储相同的值
<property name="info">
<props>
<prop key="学号">001</prop>
<prop key="sex">男</prop>
<prop key="name">小名</prop>
</props>
</property>9.P命名空间注入:
xmlns:p="http://www.springframework.org/schema/p"<bean id="student" class="com.ioc.demo.Student" p:usernmae="mike" p:password="123"></bean>10.C命名空间注入:这里要注意的是C空间命名注入注入的Bean对象必须有构造方法
xmlns:c="http://www.springframework.org/schema/c"<bean id="student" class="com.ioc.demo.Student" c:usernmae="lisi" c:password="123"></bean>