目录
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。
Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
目的:解决企业应用开发的复杂性
功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
范围:任何Java应用
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
控制反转(IoC=Inversion of Control)IoC,用白话来讲,就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
案例:实现Spring的IoC
将以前由程序员实例化对象/赋值的工作交给了spring处理
spring-context.xml
- <bean class="com.cxy.biz.impl.UserBizImpl2" id="userbiz">bean>
- <bean class="com.cxy.web.UserAction" id="userAction">
- <property name="userbiz" ref="userbiz">property>
- bean>
- <bean class="com.cxy.web.OrderAction" id="orderAction">
- <property name="userbiz" ref="userbiz">property>
- bean>
- public class Demo1 {
- @SuppressWarnings("resource")
- public static void main(String[] args) {
- ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/spring-context.xml");
- UserAction useraction = (UserAction) context.getBean("userAction");
- useraction.list();
-
- OrderAction orderaction = (OrderAction) context.getBean("orderAction");
- orderaction.list();
- }
IoC还有一个另外的名字:“依赖注入 (DI=Dependency Injection)” ,即由容器动态的将某种依赖关系注入到组件之中
依赖注入的3种方式
第一种:set注入(定义属性,set方法)
spring-context.xml
- <bean class="com.cxy.web.UserAction" id="userAction">
- <property name="userbiz" ref="userbiz">property>
- <property name="age" value="22">property>
- <property name="name" value="cxy">property>
- <property name="hobby">
- <list>
- <value>rapvalue>
- <value>篮球value>
- list>
- property>
- bean>
第二种:构造 注入
spring-context.xml
-
- <bean class="com.cxy.web.OrderAction" id="orderAction">
- <property name="userbiz" ref="userbiz">property>
- <constructor-arg name="age" value="32">constructor-arg>
- <constructor-arg name="hobby">
- <list>
- <value>rapvalue>
- <value>篮球value>
- list>
- constructor-arg>
- <constructor-arg name="name" value="cxy">constructor-arg>
- bean>
第三种: 自动转配
byName:是对Spring管理的bean对象的id进行查找,如果找不到则注入失败 反之成功byType:是对spring管理的bean对象接口实现类进行查找,如果没有或两个以上,则注入失败 反之成功
1 、id:在容器中查找Bean的id(唯一、且不能以/开头)
2 、class:bean的完整类名
3 、name:在容器中查找Bean的名字(唯一、允许以/开头、允许多个值,多个值之间用逗号或空格隔开)
4 、scope:(singleton|prototype)默认是singleton
4.1 singleton(单例模式):在每个Spring IoC容器中一个bean定义对应一个对象实例
4.2 prototype(原型模式/多例模式):一个bean定义对应多个对象实例
5 、abstract:将一个bean定义成抽象bean(抽象bean是不能实例化的),抽象类一定要定义成抽象bean,非抽象类也可以定义成抽象bean
6 、parent:指定一个父bean(必须要有继承关系才行)
7 、init-method:指定bean的初始化方法
8、 constructor-arg:使用有参数构造方法创建javaBean
- <bean id="orderaction" class="com.cxy.web.OrderAction" name="cxy" scope="prototype"
- abstract="true" parent="person" init-method="init">
- <constructor-arg name="name">
- <value>cxyvalue>
- constructor-arg>
- bean>
8+1+3
8基础数据+String+3个sql
java.util.Date
java.sql.Date
java.sql.Time
java.sql.Timestamp
通过标签赋值即可
-
- <property name="name">
- <value>ideavalue>
- property>
-
- <bean id="dateFormat" class="java.text.SimpleDateFormat">
- <constructor-arg value="yyyy-MM-dd" />
- bean>
-
- <property name="birthDay">
- <bean factory-bean="dateFormat" factory-method="parse">
- <constructor-arg value="2002-03-10" />
- bean>
- property>
5.1 JavaBean
ref bean=""
5.2 List或数组
5.3 Map
5.4 Properties
- <property name="name">
- <ref bean="name">ref>
- property>
-
- <property name="arr">
- <array>
- <value>zsvalue>
- <value>lsvalue>
- array>
- property>
-
-
- <property name="list">
- <list>
- <value>01value>
- <value>02value>
- <value>03value>
- list>
- property>
-
-
- <property name="map">
- <map>
- <entry key="id">
- <value>20220804value>
- entry>
- <entry key="id2">
- <value>20220805value>
- entry>
- map>
- property>
-
-
- <property name="pro">
- <props>
- <prop key="id">aaprop>
- <prop key="id2">bbprop>
- props>
- property>
- ApplicationContext
- String path = "applicationContext.xml";
- String path = "classpath:applicationContext-*.xml";//src
- String[] path = new String[] { "applicationContext-a.xml", "applicationContext-b.xml" };//分模块开发
1、为什么要进行整合
在未整合之前我们都是通过建模拿到Spring容器的上下文,但是建模十分耗时,并且项目庞大的话我们需要进行多次建模,就更加耗时
2、整合所需要解决的问题
2.1 建模必不可少2.2 建模要保证只执行一次
2.3建模后期再每一个Servlet都能够拿到Spring上下文对象ClasspathXmlApplication
3、如何解决
3.1.监听器的初始化方法
3. 2.Spring的上下文要存放在tomcat上下文中
WEB项目如何读取spring上下文
通过监听器实现ServletContextListener
contextConfigLocation:classpath:applicationContext-*.xml
- <context-param>
- <param-name>springConfigLocationparam-name>
- <param-value>/applicationContext.xmlparam-value>
- context-param>
监视器
- public class SpringLoadListener implements ServletContextListener{
-
- @Override
- public void contextInitialized(ServletContextEvent sce) {
- //拿到Spring的上下文
- ServletContext servletContext = sce.getServletContext();
-
- String springConfigLocation = servletContext.getInitParameter("springConfigLocation");
-
- ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/s pring-context.xml");
-
- //将Spring的上下文保存到tomcat上下文中
- servletContext.setAttribute("springContext",context );
-
- }