`
文章列表
在上面几篇日志配置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 ...
Global site tag (gtag.js) - Google Analytics