- 浏览: 236039 次
- 性别:
- 来自: 上海
最新评论
-
shuhucy:
必须赞啊,源码理解的很深,解决一个困扰两天的问题
Spring AOP源码分析(八)SpringAOP要注意的地方 -
sealinesu:
精彩
Spring事务源码分析(一)Spring事务入门 -
whlt20090509:
"WEB-INF/view目录下有一个简单的hell ...
SpringMVC源码总结(一)HandlerMapping和HandlerAdapter入门 -
hai0378:
兄台 算我一个,最近在研究dubbo motan 及 zk ...
ZooKeeper源码研究寻求小伙伴 -
zpkbtzmbw:
看懂了,原理
SpringMVC源码总结(五)Tomcat的URIEncoding、useBodyEncodingForURI和CharacterEncodingFilter
文章列表
最近遇见一个问题,即调用一个集合(只存放类A的对象)的toArray()方法变成Object[]数组,最后将它转换成A[]时抛出类型转换异常。不知道为什么不能转换成功。
最后了解到,集合的toArray方法有两个,一种就是Object[] toArray(),另 ...
先来看下下报纸和杂志的订阅:
(1)报社:出版报纸和杂志
(2)订阅者:向某家报社订阅报纸和杂志,只要报社出版了新的报纸,订阅者就会收到最新的报纸和杂志。
(3)报社具有添加和删除订阅者的功能(其实应该是订阅者具有订阅和退订的功能,这个主动权应该是订阅者而不是报社,报社也应该对外开放这样的方法)
下面就让我们来简单实现上述的描述:
报社:PublishingHouse 如下:
package com.lg.design.obser;
import java.util.ArrayList;
import java.util.List;
public class Publishin ...
Session接口方法主要有save、persist、load、get、update、saveOrUpdat、merge、delete等,这里主要是对我看hibernate书籍的一个实践加总结。
首先是save()方法:
以之前的Customer和Order为例,看下类文件:
public class Customer {
private Long id;
private String name;
private String email;
private Timestamp registeredTime;
private Set<Order> orde ...
以Person类和IDCard类为例,这里仅仅说一种一对一关联关系,即Person类拥有IDCard,但是IDCard不含Person类,数据库库的表如下:
CREATE TABLE `hibernate`.`person` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL,
`age` INT NULL,
`idcard_id` INT NULL,
PRIMARY KEY (`id`));
CREATE TABLE `hibernate`.`idcard` (
`id` INT ...
以Teacher和Student为例,他们之间是多对多的关系。
手动创建的数据库的三张表为,teacher、student、teacher_student。分别如下:
CREATE TABLE `teacher` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `student` (
`id` int(11) NOT NULL ...
上一篇文章介绍了基本知识后,本篇该介绍下现实中的一对多的关联关系。如Customer和Order,一个Customer可以拥有多个Order,每个Order只属于一个Customer。这样就存在几种表示形式,可以分为单向关联和双向关联。
形式1:Order拥有一个Customer引用,这种属于单向关联
形式2:Customer拥有Order的集合,这种也属于单向关联
形式3:Order拥有一个Customer引用,同时Customer拥有Order集合,这种属于双向关联
先来说说形式1:Order拥有一个Customer引用
Customer还是上一篇文章的形式:
public class ...
最近开始学习hibernate,然后就想把这个学习历程总结下来。还是打算主要分两个过程,第一个过程:学会使用hibernate,第二个过程:做一些源码分析,更加深入的理解。
言归正传,开始入门案例,这里的入门案例不牵扯其他框架,所以一开始学习的时候尽量不要牵扯其他框架,如SpringMVC。如果入门时牵涉其他框架,有时候会搞不清楚hibernate和其他框架的责任机制,本工程虽然搭建的是SpringMVC项目,主要是为后来服务,但是目前几乎用不到:
hibernate有两种配置文件,一种就是像jdbc那样连接数据库的配置文件,另一种就是domain类和数据库表之间的映射文件。
第一种配置文件 ...
SpringAOP要注意的地方有很多,下面就举一个,之后想到了再列出来:
(1)SpringAOP对于最外层的函数只拦截public方法,不拦截protected和private方法,另外不会对最外层的public方法内部调用的其他方法也进行拦截,即只停留于代理对象所调用的方法。如下案例:
B类有两个public方法,foo1()和foo2(),foo1内部调用了foo2,简单如下:
public void foo2() {
System.out.println("foo2");
}
public void f ...
这篇文章里面就要说说Spring自己的AOP,搞清楚哪种方式是Spring自己实现的AOP,哪种方式是Spring引入aspectj的AOP。
Spring自己的AOP实现在于ProxyFactoryBean。先看下使用案例(仍和之前的案例是一样的):接口AService、实现类AServiceImpl、通知MyBeforeAdvice
public interface AService {
public void fooA(String _msg);
public void barA();
}
public class AServiceImpl ...
本篇文章主要对Spring AOP配置背后进行了哪些事情做下说明。还是如上类似的工程,在xml中AOP拦截配置如下:
<bean id="aspectBean" class="com.lg.aop.TestAspect" />
<aop:config expose-proxy="false" proxy-target-class="false">
<aop:aspect id="TestAspect" ref="aspe ...
上一篇文章介绍了Spring AOP的JDK动态代理的过程,这一篇文章就要介绍下Spring AOP的Cglib代理过程,仍然是使用上一篇文章的工程案例。
JDK动态代理是由JdkDynamicAopProxy来生成代理对象的,Cglib则是由CglibAopProxy来生成代理对象的。JdkDynamicAopProxy、CglibAopProxy实现了AopProxy接口,如下:
public interface AopProxy {
Object getProxy();
Object getProxy(ClassLoader classLoader);
}
...
本篇文章将会介绍上一个例子中的源码执行情况,从中熟悉整个SpringAOP的一些概念和接口设计。
首先整个SpringAOP的分两大过程。
第一个过程:根据xml文件或者注解中配置的拦截信息,生成相应的代理对象,这个代理对象包含了对应的拦截器。
第二个过程:执行所拦截的方法时,就是调用代理对象的执行逻辑,完成各种拦截。
本文章先对第二个过程进行源码解析。
对第一个过程先做简单概述,如果拦截的类的对应方法是接口方法,则使用JDK的Proxy进行代理对象的创建否则使用CGLIB进行代理对象的创建。
本工程采用的之前文章所给出案例链接:http://www.iteye.com/topic/336 ...
本文章对一些SpringAOP的接口设计进行下介绍,主要是区分三者的关系,AOP联盟、Aspectj、SpringAOP所做的工作。
主要内容:
(1)Advice接口设计
(2)MethodInterceptor接口设计
(3)Advisor和Pointcut接口设计
第一个:Advice接口设计
Advice:AOP ...
本篇是介绍java实现代理对象的两种方法,JDK动态代理和CGLIB。
JDK动态代理:针对你所调用的方法是接口所定义的方法。动态的创建一个类,通过实现目标类的接口来实现代理。
CGLIB:没有限制。通过继承目标类来创建代理类,实现代理。
下面看案例:
案例一,JDK动态代理:
Person和Animals都实现了Say接口sayHello方法。现在就需要对他们的sayHello方法进行拦截。
Say接口如下:
public interface Say {
public void sayHello();
}
Person类如下:
package com.lg.aop.ba ...
ThreadLocal设计模式使用的也很频繁,会经常在各大框架找到它们的踪影,如struts2以及最近正在看的SpringAOP等。
ThreadLocal设计模式也有很多误解,我的理解是
(1)ThreadLocal所操作的数据是线程间不共享的。它不是用来解决多个线 ...