• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
站在西瓜上的猪
博客园    首页    新随笔       管理     

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>


 

posted @ 2017-12-09 17:26  站在西瓜上的猪  阅读(170)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3