目录
Spring
1.谈谈Spring
2.Spring包含JavaEE中三层每一层的解决方案
3.Spring 框架的优点
4.首先需要导入的4个包
5.IOC:控制反转,将原本在程序中手动创建对象的控制权交给了Spring框架来管理。
6.DI:依赖注入,在Spring负责创建Bean对象时,动态的将依赖对象属性注入到bean组件
7.IOC和DI的区别
8.BeanFactory接口和ApplicationContext接口的区别
9.Spring提供配置Bean的三种实例化方式
10.元素的id属性和name属性的区别
11.Bean元素的作用域
12. Bean的初始化和销毁
13.Bean 属性的依赖注入
14.集合的注入
15.XML文件的引入
16.注解形式进行开发 @Component
17.三个衍生注解
18.属性注入
19.Bean的初始化和销毁(注解)
20.Bean 的作用范围
21.是否直接可以在Servlet中加载Spring配置文件
22.AOP底层实现
23.代理模式
24.JDK动态代理只是针对于接口
25.常见概念
26.AOP的五类通知
27.常用注解
28.Spring 对事物的管理
补充
1.Spring中的模式:代理,工厂模式,模板模式
2.log4j日志级别:
3.Spring 可以帮我们做什么
4.BeanFactory的实现类
5.Spring配置文件有什么用
6.IOC的优点,降低代码量,简化编程
7.ApplicationContext的实现类
8. 什么是Spring Beans
9.Spring的内部Bean
10.什么是bean的自动装配
11.自动装配
12.SpringAOP中,关注点和横切关注点的区别是什么
Spring是分层的JavaEE/SE的一站式的轻量级的开源框架,是为了简化企业级开发应用而诞生的,其核心是IOC和AOP,IOC是控制反转,AOP是面向切面编程,Spring框架提供了JavaEE每一层的解决方法,web层:SpringMVC ,业务层:SpringBean、事务管理,AOP,持久层:jdbcTemplate、ORM框架等如:MyBatis和Struts2等,利用Spring框架,可以让开发者通过配置文件创建和组装对象及对象之间的依赖关系,Spring面向切面编程,可以帮助开发者无耦合实现日志记录,权限管理,性能分析,事务管理等。
Web层 :SpringMVC
业务逻辑层:SpringBean管理、AOP、事务管理
数据持久层:SpringJDBCTemplate、ORM模块
(1)方便解耦,简化开发:Spring是一个大场,可以将所有对象的创建和依赖关系的维护都交给Spring来管理
(2)AOP编程的支持:Spring提供面向切面编程,可以方便的对程序进行权限拦截、运行监控等
(3)声明式事务的管理:只需要通过配置就可以完成对事务的管理,而无需手动编程
(4)方便程序的测试:支持junit4
(5)方便集成各种优秀的框架
(6)降低了JavaEE API的使用难度
bean(提供框架基础部分,控制反转和依赖注入)
core(常用工具类)
context(拓展类)
expression -Spring表达式语言包
(1)IOC是将原来对象的创建权交给了Spring框架来管理
(2)DI是指在Spring负责创建Bean对象时,将依赖属性通过配置注入到bean组件当中
(3)DI依赖于IOC
(1)ApplicationContext借口继承BeanFactoy接口,Spring核心工厂是BeanFactory
BeanFactory采取延时加载,第一次getBean时才会初始化Bean
(2)ApplicationContext是在加载配置文件的时候初始化Bean,ApplicationContext是对
BeanFactory的扩展
(1)使用构造器实例化
(2)使用静态工厂方法实例化
factory-method="getBean2"
public static BeangetBean2(){
return new Bean();
}
其中:class表示的是类的全名称,factory-method表示的是静态方法
(3)使用实例工厂方法实例化
public Bean getBean3(){
return new Bean();
}
(1)通常指定id属性作为Bean的名称
(2)id属性必须是唯一的
(3)id属性的命名服从XML对ID属性的命名规范
(4)如果Bean的名称中含有特殊字符,就需要使用name属性
(5)name属性可以重复,后出现的Bean会覆盖之前出现的Bean
scope=“singleton”单例,在SpringIOC容器中仅存有一个Bean实例
scope=“prototype”多例,每次调用getBean()时,都获得一个新的实例
scope=“request” 用于web开发中,该作用域适用于WebApplicationContext环境当中
scope=“session” 用于web开发中,同样,适用仅适用于WebApplicationContext环境当中
scope=“globalSession”一般用于Porlet应用环境 ,仅适用于WebApplicationContext环境当中
通过 init-method 指定Bean的初始化方法,通过 destroy-method 指定Bean销毁方法
destroy-method 只对 scope="singleton" 有效,销毁方法,必须关闭ApplicationContext对象
(1)构造函数注入
(2)属性setter方法注入
(3)复杂类型注入
(4)p空间的使用
改写
(5)EL表达式
1.完成对象的注入
改写为
2.使用另外一个Bean属性完成注入
3.使用另外一个Bean方法完成注入
(1)List集合
爬山
游泳
(2)set集合
10
2
(3)Map集合
(1)
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans1.xml", "beans2.xml");
(2)
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
在applicationContext.xml 中
@Controller (表现层) @Services(业务层) @Repository(持久层)
(1)简单属性注入@Value
@Service("UserService")
public class UserService{
@Value("张三")
private String name;
}
(2)复杂属性注入@Autowired
@Service("UserService")
public class UserService{
@Autowired("UserDao")
private UserDao userDao;
}
@Repository("UserDao")
public class UserDao{
}
(3)指定名称注入@Resource
@Resource(name="userDAO")
private UserDAO userDAO ;
@PostContruct 初始化
@PreDestroy 销毁
@Scope(value="prototype") //默认为singleton
每次请求都会加载Spring环境,初始化所有Bean ,产生性能问题!
AOP底层使用JDK动态代理和CGlib的动态代理
面向对象编程中,我们将事物纵向抽象成了一个个对象。而在面向切面编程中,我们将
对象的某些相似的方法横向抽成一个切面,对这个切面进行权限控制,事务管理,记录日志等操作。
抽象角色:声明真实角色和代理角色的共同接口
代理角色:对真实对象进行封装
真实角色:我们最终要引用的对象
JoinPoint:连接点,指那些被拦截到的点,Spring实际中拦截到的是方法
Pointcut:切入点,指我们要对那些Joinpoint进行拦截,可以是一个或者一组
Advice:增强/通知,拦截到连接点后要做的事情
Target:目标对象,要代理的目标对象
Weaving:织入,指把增强应用到目标对象来创建新的代理对象的过程
Proxy:代理,一个类被AOP织入增强后,就产生了代理结果类
Aspect:切面,是切入点和通知的结合,一个切面可以由多个切点或者通知组成
(1)前置通知:MethodBeforeAdvice
(2)后置通知:AfterReturningAdvice
(3)环绕通知:MethodInterceptor
(4)异常通知:ThrownAdvice
(5)引介通知
@AspectJ常用注解
@Aspect 定义切面
@Before 前置通知:MethodBeforeAdvice
@AfterReturning后置增强:AfterReturningAdvice
@Around:环绕通知,MethodInterceptor
@AfterThrowing 异常通知,ThrowAdvice
(1)编程式事物管理
(2)声明式事物管理
第一步:在需要管理事物类上或者方法上添加@Transactional
第二步:在ApplicationContext.xml中配置
致命错误(fatal)->普通错误(error)->警告(warn)->信息(info) ->调试(debug)-> 堆栈(trace)
(1)Spring可以根据配置文件创建及组装对象之间的依赖关系
(2)Spring面向切面编程可以帮助我们无耦合实现日志记录,事务管理,性能分析等操作
(3)集成第三方框架
XmlBeanFactory、ApplicationContext
Spring配置文件是个XMl文件,包含了类信息,描述了如何配置他们,以及相互之间如何调用
ClasspathXMLApplicationContext、WebXmlApplicationContext
Spring beans 是那些形成Spring应用的主干java对象,它们被Spring IOC容器初始化,装配和管理
当一个Bean仅仅被用作另一个bean的属性时,他就是一个内部bean
无须在Spring配置文件中描述JavaBean之间的依赖关系,IOC容器自动建立javaBean之间的关联关系
(1)no:默认的方式是不进行自动装配,通过显式设置 ref 属性来进行装配
(2)byName:通过参数名自动装配
(3)byType::通过参数类型自动装配
关注点是应用中一个模块的行为,一个关注点,可能会被定义成一个我们想要实现的功能。横向关注点是一个整个应用都会使用的功能,影响整个应用,比如日志等。