(1)核心容器(core container):由spring-core,spring-beans,spring-context和spring-expression(SpEL,Spring表达式语言,Spring Expression Language)等模块组成
(2)数据访问(data access):jdbc,orm(jpa,heribate),transactions
(3)web:web,web-mvc,web-socket
(4)其它:aop,AspectJ,测试模块(JUnit)
(1).classPathXmlApplicationContext:加载类路径下的配置文件(要求配置文件必须在类路径下,不在的话就加载不了)
(2).FileSystemXmlApplicationContext:加载磁盘任意路径下的配置文件(必须有访问权限)
(3).AnnotationConfigApplicationContext:读取注解创建容器
ApplicationContext继承BeanFactory接口,是一种更高级的容器,提供了更多功能(Aop,国际化,消息发送)
区别:BeanFactory在启动的时候不会实例化Bean,从容器拿bean的时候才会实例化。ApplicationContext在启动的时候就把所有Bean实例化
ioc,反转控制,new实例不需要程序员去做而是交给容器来做。它是好处就是对象构建如果依赖非常多的对象,而且层次很深,外层对象构建时就会非常复杂。这时交给容器管理就会方便很多。
①BeanFactory:最简单的容器,为依赖注入提供支持
②ApplicationContext:Application Context 是 BeanFactory 的子接口,也被称为 Spring 上下文。是更高级的容器
设置:bean标签的scope属性
作用域 | 描述 |
---|---|
singleton | 单例 |
prototype | 多例,每次从容器中调用Bean,都会返回新实例 |
request | 每次HTTP请求都会创建新的Bean |
session | 同一个HTTP session共享一个Bean |
global-session | 作用域集群环境会话范围(全局会话)(负载均衡的时候) |
(1)构造方法注入
<bean id="userService" class="com.lyu.spring.service.impl.UserService">
<constructor-arg ref="userDaoJdbc"></constructor-arg>
</bean>
(2)setter注入
<bean id="" class="">
<property name="" value=""></property>
</bean>
(3)注解注入
<context:component-scan base-package=""></context:component-scan>
@component,@Controller,@Service,@Repository:注册某个类对象。value默认为首字母小写的类名
(1)Autowired是spring注解,默认ByType方式装配对象。有多个类型相同的实例,要考虑使用@Qualifier)。@Qualifier:在按照类型注入的基础上再按照ByName注入(要配合@Autowired使用)
(2)Resource是java注解,默认ByName方式装配对象
aop,面向切面编程,就是找出对多个对象产生公共影响的行为,封装成一个可重用的模块。这样可以减少代码重复,降低耦合度(可用于事务 日志等)
aop的关键在于aop框架自动创建aop代理,分为静态代理(在编译阶段生成代理类),动态代理(spring aop)。spring框架采用动态代理
动态代理又有两种方式:JDK动态代理,cglib动态代理(当目标对象实现接口时用JDK动态代理,没有实现接口时用cglib代理)
(1)连接点(Joinpoint):业务层中所有的方法
(2)切入点(PointCut):被增强的方法(使用execution匹配连接点得到切入点)
@Before("pt1()") 前置通知,在方法执行前执行
@After("pt1()") 后置通知, 在方法执行之后执行
@AfterReturning("pt1()") 返回通知, 在方法返回结果之后执行
@Around("pt1()") 环绕通知, 方法执行前和执行后都会执行(时间记录)
@AfterThrowing("pt1()") 异常通知, 在方法抛出异常之后
(3)通知:前置,后置,异常,最终,环绕(环绕着明确的切入点方法调用)
(4)织入:把增强应用到目标对象的过程
(5)切面:切入点和通知的结合
(1)配置spring开启注解aop支持
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
(2)配置切面(切入点+通知)
@Aspect
public class MyAspect {
@Before("execution(public int top.biglin.spring.aop.impl.ArithmeticCalculatorImpl.*(int,int))")
public void beforeMothod(JoinPoint joinPoint) {
System.out.println("before The method");
}
}
三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层、业务逻辑层、数据访问层。区分层次的目的即为了“高内聚低耦合”的思想。(高内聚是指一个模块只需要做好一件事)
mvc:model view controller,模型 视图 控制器。将模型和视图分离,通过控制器进行控制。降低耦合(一个数据模型可以由多种表现形式。eg:文件夹表现样式)
(1)web.xml中配置dispatcherservlet
<!-- Spring MVC配置 -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 可以自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value> 默认
</init-param>
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
(2)spring-servlet.xml配置
<!-- 启用spring mvc 注解 -->
<context:annotation-config />
<!-- 设置使用注解的类所在的jar包 -->
<context:component-scan base-package="controller"></context:component-scan>
<!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/jsp/" p:suffix=".jsp" />
(3)@RequestMapping()注解
(1)@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。包含6个属性:
①value: 指定请求的实际地址
②method: 指定请求的method类型(GET、POST、PUT、DELETE)
③consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
④produces: 指定返回的内容类型,仅当request请求头中包含该指定数据才返回(范围比consume大)
⑤params: 指定request中必须包含某些参数值时,才让该方法处理。
⑥headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
(2)@PathVariable
主要用于接收http://host:port/path/{参数值}数据。
(3)@RequestParam 主要用于接收http://host:port/path?参数名=参数值数据,这里后面也可以不跟参数值。
(4)@RequestBody
接收json格式的数据,并将其转换成对应的数据类型
1、用户发送请求至前端控制器DispatcherServlet。
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView。
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、ViewReslover解析后返回具体View.
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户。
原文:https://www.cnblogs.com/muacheng/p/13248435.html