随笔 --SSM框架、注解之总结复习

Spring–service层框架

主要技术:
IOC(DI)–控制反转(依赖注入)
将对象创建的权利及对象的生命周期的交由spring框架管理,不需要在开发过程中,关注对象的创建,及生命周期的管理,而是在需要的时候由spring框架提供,这个由spring框架管理对象创建和生命周期的机制成为控制反转;创建过程中spring依据配置对对象属性进行设置,过程称为依赖注入
创建bean类在spring中配置交由spring管理

 <bean id="person" class="org.lx.beans.Person"></bean>

spring容器获取对象使用

applicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Person p=(Person)context.getBean("person");

在初始化一个Spring容器时,Spring会去解析指定的xml文件,当解析到其中的标签时,会根据该标签中的class属性指定的类的全路径名,通过反射创建该类的对象,并将该对象存入内置的Map中管理。其中键就是该标签的id值,值就是该对象。
之后,当通过getBean方法来从容器中获取对象时,其实就是根据传入的条件在内置的Map中寻找是否有匹配的键值,如果有则将该键值对中保存的对象返回,如果没有匹配到则抛出异常
同一个标签下不允许配置多个同id的标签,如果配置则启动抛异常
Spring创建对象的方式
类的无参构造
静态工厂创建对象
实例工程创建对象
spring工厂创建对象
spring,默认采用单例模式,一个bean只会创建一个对象,存在内置map中,之后无论获取多次,都返回一个对象。减少对象创建,减少没存消耗。
bean在单例时的生命周期
spring容器启动时,解析xml发现bean标签,直接创建bean的对象存入内部map中保存,之后无论怎么调用,都getBean()从map中,一直是一个对象,对象一直被spring容器持有,容器退出时,随之销毁
bean在多例时的生命周期
spring容器启动时,解析xml标签,发现bean,只对bean进行管理,并不会创建,每次getBean时,创建新的对象,spring容器不会持有,销毁取决于对象的用户是么时候销毁。
懒加载机制
指定的bean不在启动时立即创建,而是在后续第一次用到时才创建,从而减轻在启动过程中对时间和内存的消耗。
懒加载机制只对单例bean有作用,对于多例bean设置懒加载没有意义。

 defult-lazy-init="true">
 <bean id="cart" class="cn.tedu.beans.Cart" lazy-init="true"></bean>

DI:
set 注入法
构造方法注入
自动装配

 default-autowire="byName"

AOP–面向切面编程
本身基于xml配置工作,spring配置文件写法靠Schema格式约束。后缀.xsd
xml文件默认applicationContext.xml

Spring的注解

引入context名称空间,在Eclipse中导入spring-context-3.2.xsd约束文件
指定spring自动扫描哪些个包下的类。

<context:component-scan base-package="org.lx.beans"/>

@component在配置的包的类上使用,自动注册为Bean
通常情况下注解注册bean使用类名首字母小写为bean的id,但是如果类名的第二个字母为大写则首字母保留原样.

@Autowired属性注入bean类型数据

				@Autowired
				private Cat cat;

spring容器解析xml,发现开启属性注解,发现注解,通过当前属性名寻找该ID的bean,存在注入,不存在再检查是否有同类型的bean,有注入,抛异常
@Value
注解类中包含的 int long String

@Value(“${id}”)
@Value("${name}")
通过配置到配置文件
<context:property-placeholder location="classpath:/person-data.properties" />

其他注解:
@Scope(Value=“prototype”)配置修饰类是单例还是多例,不配置默认单例
@Lazy配置修饰的bean采用懒加载
@PostConstruct方法声明为初始化方法,对象创建立即执行
@PreDestory在bean对应的类,销毁时调用的方法
修饰类:
@Controller控制层一般在web层
@Component通用注解
@Service业务层,一般在service层
@Respository用在数据访问层,dao层

AOP
在spring底层的代理拦截下切入点后,将切入点交给切面类,切面类中就要有处理这些切入点的方法,这些方法就称之为通知(也叫增强 增强方法)。针对于切入点执行的过程,通知还分为不同的类型,分别关注切入点在执行过程中的不同的时机。

		a. within表达式
			通过类名进行匹配 粗粒度的切入点表达式
				within(包名.类名)
		b. execution()表达式
			语法:execution(返回值类型 包名.类名.方法名(参数类型,参数类型…))
			<aop:pointcut expression="execution(void org.lx.service.UserServiceImpl.addUser(java.lang.String))" id="pc1"/>

据切入点规则匹配连接点调用时,拦截,交由切面增强

在这里插入图片描述
五大通知类型
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38973672/article/details/88082434