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(转)(代码片段

一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式