#Spring 一战式开发
web层:springmvc
service层:Spring的bean管理,Spring的声明式事务
dao层:Spring的jdbc模板,Spring的ORM模块
#IOC(Inversion of Controller)控制反转:把对象的创建权交给Spring
ioc开发需要引入的jar包:
spring-bean,spring-context,spring-core,spring-expression
#IOC的实现原理:
#工厂模式+反射+配置文件
在applicationContext.xml中
新建一个Test类
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(“applicationContext.xml”);
UserDao userDao = applicationContext.getBean(“User”);
#IOC和DI
1.IOC:控制反转,将对象的创建权反转给了Spring。
2.DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的 依赖的属性注入(设置)进来。
eg:
#1.4.1Spring的工厂类
[外链图片转存失败(img-zlyIgU9x-1566559228717)(https://i.imgur.com/Fbfxjbh.png)]
1.BeanFactory
2.ApplicationContext
AppilicationContext继承BeanFactory
ApplicationContext(子类):
ClassPathXmlApplicationContext:加载类路径下的配置文件
FileSystemXmlApplicationContext:加载磁盘下的配置文件
#Bean的生命周期
#Bean的相关配置
1.标签中的id和name的区别
id:使用了约束中唯一约束,里面不能出现特殊字符
name:没有使用了约束中唯一约束(理论上允许重复,实际开发中不允许重复),里面允许出现特殊的字符。
2.Bean的生命周期
.Init-method:Bean被初始化的时候执行
.destory-method:Bean被销毁时执行的方法
3.Bean的作用范围
.scope Bean的作用范围
1.singletone 单例模式(默认的)
2.prototype: 多例模式
3.request: 应用在web项目中,Spring创建这个类以后,将这个类存入到request范围
。
4.session 应用在web项目中,Spring创建这个类以后,将这个类存入到session范围
5.globalsession 应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对 于session。
4.属性的注入方式
1.构造方法的方式的属性注入
2.Set方法的方式的属性注入
public void setName(String name) {
this.name = name;
}

.对于普通类型:用value来指定值
<!--set方法,实现属性的注入-->
<bean id="car" class="com.echo.service.Car">
<property name="name" value="宝马"/>
<property name="price" value="100000"/>
</bean>
.对于包装类型:用ref来表示值
<!--属性是包装类型,实现属性的注入-->
<bean id="emp" class="com.echo.service.employee">
<property name="name" value="echo"/>
<!--包装类型 car的值 对应于上面 普通类型<bean id="car" class="com.echo.service.Car">-->
<!--包装类型 对应的值用ref 来表示-->
<property name="car"# ref= #"car"/>
</bean>
3.p名称空间完成属性的注入
普通对象: p:属性名=“值”
对象属性: p:属性名-ref="值“
<!--p名称完成属性的注入-->
<bean id="emp" class="com.echo.service.employee" p:name="Alice" p:car-ref="car">
</bean>
4.spl表达式 value=#{},也可以用各种你表达式表示
<bean id="car" class="com.echo.service.Car">
<property name="name" value="#{'Goole'}"/>
<property name="price" value="#{carinfo.setPrice()}"/>
</bean>
5.数组,集合方式的注入,在实现类中定义相应属性的set方法,将属性值注入。
<!--数组和集合集合类型的注入-->
<bean id="collections" class="com.echo.service.Collection">
<!--数组-->
<property name="arrs">
<list>
<value>"echo"</value>
<value>"Alice"</value>
</list>
</property>
<!--list集合-->
<property name="list">
<list>
<value>"Gold"</value>
<value>"Dails"</value>
</list>
</property>
<!--map-->
<property name="map">
<map>
<entry key="aaa" value="1111"/>
<entry key="bbb" value="222"/>
</map>
</property>
</bean>
5.分模块配置
.在applicationContext.xml文件中引入applicationContext1.xml配置文件
<!--导入引入数组或集合类型的配置文件 applicationContext1.xml-->
<import resource="applicationContext1.xml"/>