Spring
Posted 站在西瓜上的猪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring相关的知识,希望对你有一定的参考价值。
IOC
Inversion of Control
控制反转
DI
Dependecy Injection
依赖注入
控制反转
把依赖类的对象交给Spring容器去创建
依赖注入
由Spring容器把依赖的对象注入到需要的bean中
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("file:D:\\workspace1\\SpringTest\\src\\applicationContext.xml");
3.加载配置文件
1.加载
第一种方式
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="classpath:user.properties"/>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:locations="#{new Object[]{‘classpath:user.properties‘,‘classpath:user2.properties‘}}"/>
第二种方式(简化写法)
<context:property-placeholder location="classpath:user.properties,classpath:user2.properties"/>
2.使用资源文件中的变量
<bean id="userService" class="com.shuai.web.domain.UserService"
p:name="${name}"
p:pwd="${phone}"/>
3.UserService.java
public class UserService {
private String username;
private String password;
get/set
}
4.user.properties
username=shuaige
password=123456
AOP编程的概念:
Aspect: 切面、方面. Joinpoint: 连接点.程序执行过程中一个明确的点.
Advice: 增强处理.就是Aop框架在切入点插入(织入)这一段通用处理代码.
Pointcut切入点:可以插入增强处理的连接点.简而言之,当某个连接点满足指定要求时,
该连接点将被添加增强处理,该连接点也就变成了切入点.
Target Object目标对象:被AOP框架进行增强处理的对象,也被称为被增强的对象.
如果AOP框架是通过运行时代理来实现的,那这个对象将是一个被代理的对象.
AOP代理:AOP框架创建的对象,简单地说,代理就是对目标对象的加强.
Spring中的AOP代理可以是JDK动态代理,也可以是CGLIB代理,
前者为实现接口的目标对象的代理,后者为不实现接口的目标对象的代理.
Weaving织入: 将增强处理添加到目标对象中、并创建一个被增强的对象(AOP代理)的过程就是织入.
织入有两种实现方式: 编译时增强(例如AspectJ)和运行时增强(例如CGLIB).
Spring和其他纯Java AOP框架一样,在运行时完成织入.
配置
1.UserService.java
1 public class UserService { 2 public String say(String name){ 3 return "Spring4"; 4 } 5 }
2.LogAdvice.java
1 public class LogAdvice implements MethodBeforeAdvice, AfterReturningAdvice { 2 @Override 3 public void before(Method targetMethod, Object[] args, Object targetObject)throws Throwable { 4 System.out.println("目标方法:" + targetMethod.getName()); 5 System.out.println("目标方法实参:" + args.length); 6 System.out.println("目标对象:" + targetObject); 7 } 8 @Override 9 public void afterReturning(Object res, Method targetMethod, Object[] args,Object targetObject) throws Throwable { 10 System.out.println("目标方法:" + targetMethod.getName()); 11 System.out.println("目标方法实参:" + args.length); 12 System.out.println("目标对象:" + targetObject); 13 System.out.println("目标方法的返回值:" + res); 14 } 15 }
3.配置
1 //业务bean 2 <bean id="userService" class="com.shuai.web.service.UserService"/> 3 //配置一个切面Bean 4 <bean id="logAdvice" class="com.shuai.web.aop.LogAdvice"></bean> 5 //aop配置信息 6 <aop:config> 7 <aop:pointcut expression="execution(* com.shuai.web.service.UserService.*(..))" id="pointcut"/> 8 <aop:advisor advice-ref="logAdvice" pointcut-ref="pointcut"/> 9 </aop:config> 10 说明 11 expression: 切入点表达式 12 execution([访问权限] [返回值类型] 包.类.方法(形参) [throws 异常]) 13 aop:advisor:引用容器中存在的切面Bean
事物
aop切面(切业务层) 声明式事务advice配置 事务属性 read-only="true"只读事务 read-only="false"不是只读事务 propagation="REQUIRED"事务传播性 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中.(这是最常见的选择) isolation="DEFAULT"事务隔离性 使用数据库默认的事务隔离级别 rollback-for出现什么异常回滚 no-rollback-for出现什么异常不回滚 配置aop命名空间 aop事务切面配置 <!-- 把事务Advice织入到哪些切入点(AOP事务切面) --> <aop:config> <!-- 定义切入点(切业务层) --> <aop:pointcut expression="execution(* com.yayadou.springhibernate.service.*.*(..))" id="pointcut"/> <!-- 将事务Advice运用到指定的切入点 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/> </aop:config> annotation注解 tx:annotation-driven <!-- 开启annotation注解事务 --> <tx:annotation-driven transaction-manager="transactionManager"/> @Transactional()事务注解 @Transactional()事务注解 // 事务注解 @Transactional(readOnly=false, // 不是只读事务 isolation=Isolation.DEFAULT, // 事务隔离性 propagation=Propagation.REQUIRED) // 事务传播性 写在业务类上这个类中所有方法都起作用 写在业务类的方法上只有这个方法起作用
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
以上是关于Spring的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot:thymeleaf 没有正确渲染片段
What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段
Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]
解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段