- 浏览: 429259 次
- 性别:
- 来自: 杭州
最新评论
-
moshenglei:
应用Spring AOP(六)-------Annotation注解配置方式 -
zuishengmengsi1990:
支持分布式吗
使用Pushlet实现后台信息推送(二) -
hong782365:
...
应用Spring AOP(六)-------Annotation注解配置方式 -
liangma2:
qingchenyuji 写道您好, 看了您的博文,想向您请 ...
使用Pushlet实现后台信息推送(一) -
wuent:
不错~
Java调用Python
文章列表
在上面几篇日志配置Spring事务的时候都涉及到了事务的传播和隔离性,这里具体深入理解一下。
当多个事务嵌套时,某个事务的propagation事务传播将会直接影响最终的执行效果。
具体propagation的解释如下:
propagation属性
说明
REQUIRED
无论当前事务上下文中有没有事务,都会创建一个新的事务。也即逻辑需要在一个事务中运行,如果方法运行时,已处在一个事务中,那么就加入该事务,否则自己创建一个新的事务
SUPPORTS
如果当前事务上下文中有一个事务,那么使用事务上下文中的事务(加入外层的事务,成为外层事务的一部分);如果没 ...
整体的工程代码跟上一篇日志的工程差不多。
服务类StudentService.java的代码如下:
package com.mysrc.service;
import java.sql.Date;
import java.util.List;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.s ...
类似于上一篇日志,这里使用AOP的方式来配置。
工程结构:
大部分代码跟上一个工程类似。
服务类StudentService.java代码如下:
package com.mysrc.service;
import java.sql.Date;
import java.util.List;
import com.mysrc.dao.StudentDao;
import com.mysrc.entity.Student;
public class StudentService {
private StudentDao dao;
public v ...
这里列一个小的demo工程,直接利用Spring的jdbcTemplate访问Mysql数据库。
工程结构:
数据库中的tbl_student表结构如下:
数据实体类Student.java代码如下:
package com.mysrc.entity;
import java.sql.Date;
public class Student {
private int id;
private String name;
private Date birth;
private float score;
public Student() { ...
Spring AOP的注解方式在官网的doc文档里也有详细的说明:http://docs.spring.io/spring/docs/2.0.8/reference/aop.html
还是上篇日志的示例工程,现在换成Annotation注解的方式来配置AOP,工程结构一样的: AllLogAdvice类代码变成了如下:
package com ...
Spring AOP提供了xml配置文件以及Annotation注解的方式更方便的进行AOP的配置。当然这两种方式的最大的好处是更好的降低了代码耦合性。
XML配置的示例工程代码: 和前面的工程相比,前置通知,后置通知那几个通知类没有了,所有的通知逻辑直接放到了AllLogAdvice类的方法里:
package com.aop;
import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
public cla ...
记得参加今年的网易校招Java研发工程师职位的笔试题中就有类似的这个题目,还好之前看过网上的介绍,而且阿里巴巴一面的时候这个知识点也帮了我的大忙,嘿嘿。。
这篇文章太有用了,讲得很透彻:http://www.blogjava.net/DoubleJ/archive/2008/03/04/183796.html
大体就是应用动态代理,说白了就是反射+代理模式,其中java.lang.reflect.InvocationHandler接口是关键。
如果只想拦截在某种情况下调用的方法,可以使用Spring AOP提供的ControlFlowPointcut来完成这个功能。比如,只有在MainTest类中的aaMethod方法中调用的目标类的方法才会被拦截,其它地方调用的目标类的方法将不会被拦截 ...
上一篇日志使用的前置通知,后置通知,环绕通知和异常通知可以很好的拦截方法,并插入相应的代码。但是却存在一个问题,就是Spring AOP拦截了目标类中的所有方法。而在通常情况下,只需要拦截部分方法,比如只需要拦截目标类中方法名以set开始的所有方法。Spring AOP提供了Advisor和PointcutAdvisor来达到这个目的。
常用的PointAdvisor有三种,DefaultPointcutAdvisor , RegexpMethodPointcutAdvisor 和 NameMatchMethodPointcutAdvisor,它们都在org.s ...
AOP即Aspect-Oriented Programming,面向方面编程。AOP和OOP类似,也是一种编程模式。但是AOP并不能取代OOP,它只是对OOP的扩展和补充。Spring AOP是基于AOP编程模式的一个框架,它实现了AOP范围内的大多数功能,包括Advice、Pointcut等。
AOP典型的应用场景:
http://pandonix.iteye.com/blog/336873 写道
1.对部分函数的调用进行日志记录,用于观察特定问题在运行过程中的函数调用情况 2.监控部分重要函数,若抛出指定的异常,需要以短信或邮件方式通知相关人员 3. ...
用Junit进行单元测试很方便,尤其是Junit4引入了很多Annotation注解以后。看测试的示例:
待测试类:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int minus(int a, int b) {
return a - b;
}
public int square(int n) {
return n * n;
}
//Bug : 死循环
public void square ...
再了解ThreadLocal之前先看一个简单的Java线程示例。
线程类:
public class TestThread2 extends Thread {
int a;
String b = "a";
@Override
public void run() {
for (int i = 1; i <= 3; i++) {
System.out.println(Thread.currentThread().getName() + " " + a + " "
+ b);
...
JDK中提供了另一个序列化接口--Externalizable,使用该接口之后,之前基于Serializable接口的序列化机制就将失效。Externalizable继承于Serializable,当使用该接口时,序列化的细节需要由程序员去完成。
测试代码:
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java. ...
还是上一篇日志的测试代码:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = -842029427676826563L;
public static String name = &qu ...
“序列化是将对象状态转换为可保持或可传输的格式的过程”。为什么要序列化,说的很清楚了,就是为了将对象状态进行持久化或者进行传输。注意这里说的是对象状态,所以只有对象的属性变量才会进行序列化,方法是不会序列化的。Java中所有实现Serializable接口的对象就表明是可序列化的。
示例代码:
import java.io.Serializable;
public class Person implements Serializable{
private static final long serialVersionUID = -842029427676826563 ...