Spring 是一个开源框架,分层的 JavaEE 一站式框架。
一站式框架是: Spring 有 JavaEE 开发的每一层解决方案。
Spring简介
Spring Boot 构建
Spring Cloud 协调
Spring Cloud Data Flow 连接
-
WEB层:SpringMVC
-
Service层:Spring的Bean管理,声明式事务
-
DAO层:Spring的JDBC模板,ORM模板
使用Spring框架的好处
-
Spring框架的IOC(Inversion of Control 控制反转)能够很好的降低程序的耦合度。
-
Spring框架的面向AOP(Aspect Oriented Programming 面向切面编程)能够让我们在不修改代码的前提下对原有的功能进行增强。
1)SpringCore:是Spring的核心功能:IOC容器,解决对象创建及依赖关系。
2)SpringWeb:Spring对web模块的支持。
3)Spring DAO:是Spring对Jdbc操作的支持。
4)Spring ORM:是Spring对ORM的支持。
5)SpringEE:Spring对javaEE其它模块的支持。
6)Spring AOP:(面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术,是OOP的延续)。
bean对象创建的三种方式
(1)调用默认无参构造函数(此种方式用的最多),默认情况下,如果类中没有无参构造函数,则创建失败,会报异常。
(2)使用静态工厂的方法创建对象,需要使用bean标签中的factory-method属性,指定静态工厂中创建对象的方法。
(3)使用实例工厂的方法创建对象
bean的作用范围
bean的作用范围是可以通过bean.xml配置文件中bean标签的scope属性来配置的,scope属性的取值如下:
(1)singleton:单例的对象(默认值)
(2)prototype:多例的对象(当我们让sping来接管struts2的action创建时,action必须配置此值)
(3)request:作用范围是一次请求,和此次请求转发
(4)session:作用范围是一次会话
(5)globalsession:作用范围是一次全局会话
bean对象的生命周期
(1)单例
出生:容器创建,对象出生
活着:容器在,对象在
消亡:容器消亡,对象消亡
(2)多例
出生:每次使用,每次创建
活着:只要该对象一直在使用,就一直活着
消亡:该对象长时间没用或没有被其他对象引用,就会被垃圾回收器回收
Spring中beans.xml文件的建立和使用
beans.xml空模板
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- bean definitions here --></beans>
beans.xml中配置一个bean(对象)
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--配置一个bean[对象]-->
<bean id="userService" class="com.cyh.service.IUserServiceImpl"></bean></beans>
在测试类中加载beans.xml
import com.caiwan.service.IUserService;
import com.caiwan.service.IUserServiceImpl;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Lesson01 {
//现在使用UserService方式从spring容器中获取
@Test
public void test2(){
//1.加载beans.xml这个spring配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("com/cyh/beans.xml");
//2.从spring容器(context)获取IUserService对象
IUserService userService = (IUserServiceImpl)context.getBean("userService");
//3.调用
userService.add();
}
}
//注意:通过getBean得到的对象,无论创建几个,都是一个对象!
spring 框架解决字符串编码问题:过滤器 CharacterEncodingFilter(filter-name)
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
自动加载类
目前spring提供了两种加载器,提供web容器的加载:
一种是ContextLoaderListener,另一种是ContextLoaderServlet。
这两种在功能上完全相同,只是一种是基于Servlet2.3版本中新引入的Listener接口实现,而另一种是基于Servlet接口实现,以下是这两种加载器在web.xml中的时机配置应用:
①
/*
ContextLoaderListener是Spring的监听器,它的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。
*/
<listener>
<listener-class>org.springframework.context.ContextLoaderListener</listener-class>
</listener>
②
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- <param-value>classpath*:config/applicationContext.xml</param-value> -->
<param-value>/WEB-INF/myApplicationContext.xml</param-value>
</context-param>
最后我们可以通过WebApplicationContextUtils.getWebApplicationContext方法在web应用中获取applicationcontext的引用。
文章持续更新:欢迎各位小伙伴关注我的公众号:菜丸的程序屋。希望将我的不足之处给予指点,谢谢大家。喜欢Java,热衷学习的小伙伴可以加我微信: CaiWan_Y