• 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>

    
    
  • 相关阅读:
    彩票股票金融与运气之研究(四)易道
    寻物一例
    彩票股票金融与运气之研究(三) 抽象模型
    彩票股票金融与运气之研究(一)前奏
    占何时可招到人
    占这单项目可成否
    C#控制DataMax打印机问题总结
    微软宣布Silverlight 5
    Windows Phone 7应用之sina微博——UI设计
    传言:Windows Phone 7“芒果”更新将增加 HTML5 支持
  • 原文地址:https://www.cnblogs.com/sylwh/p/8012077.html
Copyright © 2020-2023  润新知