spring
传统项目action--->service--->dao,项目各个组件的链接的紧密度太高(耦合度太高)
spring框架可以对项目的各个组件进行解耦
1.spring核心模块
(1)IOC:控制反转 概念 本来是程序员new对象,现在是程序员在spring配置文件中
注册bean,然后变成spring容器new对象。这种控制权的转换叫控制反转
(2)AOP:面向切面编程 监控程序的程序
2.spring是一站式框架
(1)springMVC 和前台交互部分
(2)Dao部分jdbcTemplate
(3) spring复制整个工程的管理
3.spring配置模式
(1)文档式配置
(2)注解式配置
4.相关框架的版本问题
(1)struts2.x
(2)hibernate3.x 4.x 5.x
(3)spring3.x spring4.x
5.spring入门实例
1.将基本spring jar拷贝到项目目录下
2.到spring官方资料中拷贝约束(schema)
(2.1)拷贝路径
spring-framework-3.0.0.RELEASE-with-docs\spring-framework-3.0.0.RELEASE\docs\spring-framework-reference\html\xsd-config.htm
(2.2)将约束拷贝到applicationContext.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" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> </beans> |
3.编写UserDao容器注册的实例
(3.1)编写UserDao 中间query()方法
package dao;
package dao;
public class UserDao {
public void query(){
System.out.println("UserDao.query()...");
}
}
4.将UserDao注册到applicationContext.xml
<bean id="userDao" class="dao.UserDao">
</bean>
5.编写测试类 public class Test { /** * @param args */ public static void main(String[] args) {
//将总配置文件加载到内存中(使用dom4j解析) ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//根据在spring.xml文件中注册的UserDao类的ID获取并创建对象 UserDao userDao=(UserDao)context.getBean("userDao");
userDao.query(); } } |
spring Bean的属性:
id:不能使用特殊字符,根据ID从spring容器可以获取到对象。
name:不能使用特殊字符,根据Name从spring容器可以获取到对象。
class:自定类的具体路径使用"."链接(比如:dao.UerDao)
scope:
singleton:单例模式*
protoType:非单例*
request:在web项目中,将对象保存到request中。
session: 在web项目中,将对象保存到session中。
global session:在prozel环境中使用,如果不是这个环境,相当于session
IOC原理
1.内部原理
2.spring内部执行过程
11.IOC和DI的区别
1.IOC:控制反转
2.DI依赖注入
关系:DI需要和IOC配合才能完成,Bean的注入对象的创建。
12.spring整合web项目原理
1.spring在web.xml中嵌入监听器,监听服务器创建ServletContext对象
<!-- 配置spring的监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> |
2.当请求到达服务器,ServletContext被创建,会自动创建spring容器
自动调用一下代码:
ApplicationContext context=
new ClassPathXmlApplicationContext("applicationContext.xml");
3.spring帮我们所创建的文件,保存到ServletContext对象中。
13.spring的Bean管理(注解方式)
1.注解介绍:
1.代码里面特殊标记,使用注解可以完成功能。
2.注解写法@注解名称(属性名称=属性值)
3.注解使用在类的上面,方法上面和属性上面
2.操作流程
1.导入jar包
2.创建类和方法
........
3.创建spring配置文件,引入约束
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
4.开启注解
<!-- 开启扫描 并指定需要扫面的包 -->
<context:component-scan base-package="cn.*"/>
5.创建测试类测试
3.创建对象的四种注解
@Controller : web层 servlet
@Service :业务层
@Repository :持久层 dao
@Component :其他组件
目前这四个注解功能一样,都可以创建对象。使用层标注为了让类的用途清晰化
4.使用注解注入属性
@Autowired
@Resource(name="userDao")
注意:@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,
而@Resource默认按 byName自动注入罢了。
5.xml和 注解混合使用
14.AOP
(1)aop概述
1.AOP面向切面编程,扩展功能不修改源代码。
2.AOP采用横向切割,取代传统的纵向继承体系
重复性代码(性能监视、事务管理、安全检查、缓存)
(2)底层原理
1.横向切割
2.纵向切割
(3)操作相关术语
Joinpoint(连接点:类里面可以被增强的方法,这些方法叫连接点)
Pointcut(切入点:JoinPoint拦截点)
Advice(通知/增强:拦截到之后所做的事情;分为、前置、后置、异常、最终、
环绕)
Aspect(切面:切入点和通知的结合)
(4) aop操作(基于aspectj的xml方式)
(5)log4j介绍
(6)spring整合web项目演示