码迷,mamicode.com
首页 > 编程语言 > 详细

Spring

时间:2017-12-09 19:33:53      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:inject   aspectj   value   处理   gad   manager   方式   nbsp   new   

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

标签:inject   aspectj   value   处理   gad   manager   方式   nbsp   new   

原文地址:http://www.cnblogs.com/sylwh/p/8012077.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!