SSM框架知识点整理
SSM框架知识点整理
spring
优点
⽅便解耦,简化开发
spring ioc注解Spring就是⼀个⼤⼯⼚,专门负责⽣成Bean,可以将所有对象创建和依赖关系维护由Spring管
AOP编程的⽀持
Spring提供⾯向切⾯编程,可以⽅便的实现对程序进⾏权限拦截、运⾏监控等功能
声明式事务的⽀持:
只需要通过配置就可以完成对事务的管理,⽽⽆需⼿动编程
⽅便程序的测试:
Spring对Junit4⽀持,可以通过注解⽅便的测试Spring程序
⽅便集成各种优秀框架:
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的⽀持降低JavaEE API的使⽤难度 Spring:
对JavaEE开发中⼀些难⽤的API(JDBC、JavaMail、远程调webservice⽤等),都提供了封装,使这些API应⽤难度⼤⼤降低框架结构
在项⽬中的架构
web层:Struts,SpringMVC
dao层:Hibernate,mybatis
IoC(控制反转)
配置
导包(l)
<!--spring的jar包依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xsi="/2001/XMLSchema-instance"
schemaLocation="/schema/beans
/schema/beans/spring-beans.xsd">
</beans>
空构造器⽅式实例化
1.实例化的Bean中需要空参构造器
2.<bean id=""class=""></bean>
静态⼯⼚⽅式实例化
1.需要⼀个⽣产Bean的⼯⼚,静态的⽅法有返回值Bean
2.<bean id="需要创建bean的id"class="⼯⼚类的全限定名"factory-method="静态⽅法名"></bean>实例化⼯⼚⽅式实例化
1.需要⼀个⽣产Bean的⼯⼚,⾮静态⽅法有返回值Bean
2.<bean id="⼯⼚id"class="⼯⼚类的全限定名"></bean>
3.<bean id="需要创建bean的id"factory-bean="⼯⼚id"factory-method="⾮静态⽅法名"></bean> DI(依赖注⼊)
Set注⼊
bean对象中要有set⽅法
<bean id="需要注⼊的属性id"class=""></bean>
<bean id=""class="">
<property name="需要注⼊的属性名称"ref="需要注⼊的属性id"value=""></property>
</bean>
构造器注⼊
bean对象中要有带参构造器
<bean id="需要注⼊的属性id"class=""></bean>
<bean id=""class="">
<constructor-arg name="需要注⼊的属性名称"ref="需要注⼊的属性id"value=""></constructor-arg >
</bean>
静态⼯⼚⽅式注⼊
IoC静态⼯⼚和DI Set⽅式的组合
bean对象中要有set⽅法
需要⼀个⽣产Bean的⼯⼚,静态的⽅法有返回值Bean
<!-- 静态⼯⼚注⼊ -->
<bean id="userDao01"class="com.mage.demo.StaticFactory"factorymethod="createuserDao"></bean>
<bean id="userService01"class="com.mage.demo.UserService">
<property name="userDao"ref="userDao01"></property>
</bean>
实例化⼯⼚⽅式注⼊
IoC实例化⼯⼚和DI Set⽅式的组合
需要⼀个⽣产Bean的⼯⼚,⾮静态⽅法有返回值Bean
bean对象中要有set⽅法
<!-- 实例化⼯⼚ -->
<bean id="instanceFactory"class="com.mage.demo.InstanceFactory"></bean>
<bean id="userDao3"factory-bean="instanceFactory"factory-method="createUserDao">
</bean>
<bean id="userService02"class="com.mage.demo.UserService">
<property name="userDao"ref="userDao3"></property>
</bean>
注解⽅式注⼊Bean
对于bean的注⼊常⽤注解类型
@Autowired属性字段或set⽅法上
@Resource属性字段或set⽅法上
区别:@Autowired默认按bean的类型匹配可以修改按名称匹配和@Qualifier配合使⽤@Resource默认按名称进
⾏装配,名称可以通过name属性进⾏指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进⾏匹配注⼊,如果注解写在setter⽅法上默认取属性名进⾏装配。当不到与名称匹配的bean时才按照类型进⾏装配。但是需要注意的是,如果name属性⼀旦指定,就只会按照名称进⾏装配。
推荐使⽤@Resource注解是属于J2EE的,减少了与spring的耦合。
Spring IoC容器⾃动扫描管理bean
Dao层:@Repository
Service层:@Service
视图控制层:@Controller
如果对于开发的类实在不明确到底属于哪个层,可以使⽤@Component注解定义。
Bean的作⽤域问题
类别说明
singleton在Spring IoC容器中仅存在⼀个Bean实例,Bean以单例⽅式存在,默认值
prototype每次从容器中调⽤Bean时,都返回⼀个新的实例,即每次调⽤getBean()时 ,相当于执⾏new XxxBean()
request每次HTTP请求都会创建⼀个新的Bean,该作⽤域仅适⽤于WebApplicationContext环境
session同⼀个HTTP Session 共享⼀个Bean,不同Session使⽤不同Bean,仅适⽤于WebApplicationContext 环境
类别说明
globalSession⼀般⽤于Portlet应⽤环境,该作⽤域仅适⽤于WebApplicationContext 环境
Bean的⽣命周期问题
⽣命周期图解释
1.instantiate bean对象实例化
2.populate properties 封装属性
3.如果Bean实现BeanNameAware 执⾏ setBeanName
4.如果Bean实现BeanFactoryAware 执⾏setBeanFactory ,获取Spring容器
5.如果存在类实现 BeanPostProcessor(后处理Bean) ,执⾏postProcessBeforeInitialization
6.如果Bean实现InitializingBean 执⾏ afterPropertiesSet
7.调⽤<bean init-method="init">指定初始化⽅法 init
8.如果存在类实现 BeanPostProcessor(处理Bean) ,执⾏postProcessAfterInitialization,执⾏业务处理
9.如果Bean实现 DisposableBean 执⾏ destroy
10.调⽤<bean destroy-method="customerDestroy">指定销毁⽅法 customerDestroy
代理模式
静态代理
为某个对象提供⼀个代理,代理⾓⾊固定,以控制对这个对象的访问。代理类和委托类有共同的⽗类和⽗接⼝,这样在任何使⽤委托类对象的地⽅都可以⽤代理对象代替。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执⾏完请求后的后续处理。
动态代理
相⽐于静态代理,动态代理在创建代理对象上更加的灵活,它会根据需要通过反射机制在程序运⾏期动态的为⽬标对象创建代理对象,代理的⾏为可以代理多个⽅法, 即满⾜⽣产需要的同时⼜达到代码通⽤的⽬的。动态代理的两种实现⽅式 。
jdk⽅式实现
import flect.InvocationHandler;
import flect.Method;
import flect.Proxy;
/**
*jdk 动态代理
*/
public class JdkHandler implements InvocationHandler{
// ⽬标类
private Object target;
public JdkHandler(Object target){
this.target = target;
}
/**
* 程序运⾏期动态创建代理⾓⾊
* @return
*/
public Object getProxy(){
/**
* 获取代理对象
* 1.类加载器
* 2.⽬标类实现的接⼝数组
* 3.当前类
* @return
*/
Class().getClassLoader(),
}
public void before(){
System.out.println("婚礼现场紧张布置中......");
}
@Override//InvocationHandler内部参数当前⽬标类的⽅法参数
public Object invoke(Object proxy, Method method, Object[] args)throws Throwable { before();//增强真实⾓⾊⾏为
Object result= method.invoke(target, args);// 执⾏真实⾓⾊⽅法
after();//增强真实⾓⾊⾏为
return result;
}
public void after(){
System.out.println("恭喜您成功进⼊⼈⽣第⼆阶段.....");
}
}
cglib⽅式实现
导包
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
实现
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论