学习spring

学习spring

spring是简化企业开发,不替代什么
主要为aop,ioc
配置方式:xml,注解,java

位置:管理程序的总管家,认为所有类都是资源,都可以由spring管理(对象的创建,初始化,销毁,对象关联关系)
主要作用:解耦合

系统功能分为:主业务逻辑(解耦方式ioc),系统级业务逻辑(解耦方式aop)
ioc(控制反转)
aop(面向切面)

orm对象关系映射
oxm对象到xml的映射

获取前对象已经产生

di 依赖注入

ioc:

ioc注入方式:
getset注入

底层:使用反射技术 简单类型:赋值用value 对象类型:赋值用ref

构造器注入:通过构造方法赋值



不指定 默认顺序赋值 默认输入值的类型为String 因此不建议使用默认
可以类型指定

可以索引指定

可以名字指定

p命名空间
p:属性名=“属性值”

注入集合类型:
list array[] map set properties



<property name="list">
	<list><value>值</value></list>
</property>

<property name="set">
	<set><value>值</value></set>
</property>

<property name="map">
	<entry>
		<key><value>k值</value></key>
		<value>值<value>
	</entry>
</property>

</property>
	<!-- Properties注入 -->
		<property name="props">
		<props>
		<prop key="b">足球3</prop>
		<prop key="l">篮球3</prop>
		<prop key="p">排球3</prop>
		</props>
	</property>

getset注入 value 与
参数位置 : 写在value属性中必须加双引号 写在首位标签中不加双引号
type: 无 可以通过type属性指定数据类型 写全类名
特殊字符 使用xml预定义的实体引用 使用<![CDATA[ ]]>标记 使用<![CDATA[ ]]>标记 或者 使用xml预定义的实体引用

处理空值


在ioc容器中bean的类必须有无参构造

自动装配 (约定优于配置)

根据id自动装配 简单类型无法装配
byName:自动寻找ioc容器中bean的id是否与类属性名一致
byType:其他bean的类型 (class)是否与 该类的ref属性类型一致 (只能有一个bean满足条件)

一次性全局自动装配
在头文件 添加 default-autowire=“byName”
以后再次标注可覆盖
自动装配可以减少代码量,但是降低可读性

使用注解定义bean
在bean中加入
<context:component-scan base-package=“包名,包名”></context:component-scan>
spring在启动时扫描包,查找带注解的所有类
在class上加 @component(“id名”)
细化
@repository:dao层注解
@service: service层注解
@Controller:控制层注解

使用注解声明事务:
事务要不全成功,要不全失败
jar包:tx,ojdbc,commons-dbcp 连接池数据源,pool连接池 ,spring-jdbc,aopalliance
配置: 事务命名空间 tx
配置数据库相关:





连接池最大活动时间
最大空闲时间

配置事务管理器:核心



把方法变成事务@transactional

aop:
面向切面 (面向方法)
jar: aspectjweaver,aopallinace spring-aop
通知:前置通知 后置通知 环绕通知 异常通知
实现接口 实现方法
前置通知: MethodBeforeAdvice before(目标对象,方法名,方法参数个数,返回值)
后置通知: AfterRetruningAdvice afterRetumi
异常通知: ThrowsAdvice 无
环绕通知: Methodlnterceptor invoke()

通知与方法配置(连接线)
aop:config
<aop:pointcut expression=“execution(public void org.lanqiao.service.student(org.lanqiao.pojo.Student)) id=“login””>
<aop:advisor advice-ref=“通知类bean的id” pointcut-ref=“login”/>
</aop:config>
通知多个方法
在expression="execution(public void org.lanqiao.service.delete(int) or execution(public void org.lanqiao.service.student(org.lanqiao.pojo.Student))
expression更多用法图片1

环绕通知:在目标方法的前后,异常发生时,最终等各个地方都可以进行的通知,最强大的一个通知;可以获取目标方法的全部控制权()
invoke()
{
try{
…在这代码是前置通知
object result = invocation.proceed(); result方法的返回值
…在这代码是后置通知
}catch(Exception e){
…在这是异常通知
}finally{
…最终通知
}
return result;
}

使用注解实现aop
jar:与实现接口相同
配置:
纳入容器 可以使用bean或注解
开启注解支持:aop:aspectj-autoproxy</aop:aspectj-autoproxy>

通知注解:@Aspect 通知类
@Befor(“execution(public void org.lanqiao.service.delete(int)”)前置方法注解 属性:定义切入点 单个属性
@AfterReturning(pointcut=“execution(public * org.lanqiao.service.delete(int)” , returning=“returningValue”)后置通知注解 有返回值需要定义多个参数
@Around("") 环绕通知 参数为 ProceedingJoinPoint jp
@AfterThrowing("") 异常通知
@After("") 最终通知
注解形式获取目标对象的参数 在自定义的方法参数设置为JoinPoint jp 返回值 object returningValue (不可更改) 类似于invocation

通过 配置将类变为通知
基于Schema配置
配置:将方法和通知类纳入ioc
aop:config
<aop:pointcut expression=“execution(public void org.lanqiao.service.student(org.lanqiao.pojo.Student)) id=“login””>
<aop:aspect ref=“通知类bean的id”>
<aop:before method=“前置通知方法名” pointcut-ref=“另一端的id”/>
<aop:after-returning medth=“后置通知方法名” pointcut-ref=“另一端的id” returning=""/>返回值需声明
</aop:aspect>
</aop:config>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值