文档章节

NOTE:JAVA

猪刚烈
 猪刚烈
发布于 2014/10/12 11:47
字数 3539
阅读 5
收藏 0
点赞 0
评论 0

 

2007-6-15

____________________________________________________________________________________

 

1.spring容器

  spring容器就是IoC容器,用来实现反转控制的spring组件.spring中提供了两种IoC容器:BeanFactoryApplicationContext

ApplicationContextBeanFactory的一个子接口,它继承了BeanFactory接口,并提供一些更为强大的功能.通常情况下,建议使用

ApplicationContext.

  ApplicationContext还有一个独特的能力:预加载单态类.BeanFactory中所有的类都是延迟加载(lazy load)

 

2.spring,如果一个对象的字段是map类型,那么这里会一个小小的约束:那是在对该map进行配线时,它的key只能是string类型

 

2007-6-18

____________________________________________________________________________________

 

1.关于setter注入和constructor注入

两种注入方法各有用特点,应该根据实际情况选择使用那一种注入方法。

一般来说:constructor注入用于注入那些不易变的类属性:比如一个DAOconstructor注入只会执行一次,一旦注入将不再改变

而且构造函数并不多时。另个构造函数注入将使得类不易被继承,因为其子类在继承它时必须使用其父类的构造方法。

setter注入更加灵活,可以用来注入那些常常变动的(mutable)属性,但是这也可能导致一个属性被多次反复注入同一值的问题.

总之如何在setter注入和constructor注入选择要根据实际情况来确定.

 

2007-6-20

__________________________________________________________________________________________-

 

1.Most aspects are a combination of advice that defines the

aspect’s behavior and a pointcut defining where the aspect should be executed.

Spring recognizes this and offers advisors, which combine advice and pointcuts

into one object. More specifically, the PointcutAdvisor does this.

public interface PointcutAdvisor {

Pointcut getPointcut();

Advice getAdvice();

}

 

2.Spring使用术语advisor来 表示代表方面的对象,它包含一个通知和一个指定特定连接点的切入点。

Spring中,一个advisor就是一个aspect的完整的模块化表示。一般地,一个advisor包括通知和切入点。

org.springframework.aop.support.DefaultPointcutAdvisor 是最通用的advisor类它可以和MethodInterceptor BeforeAdvice或者ThrowsAdvice一起使 用

 

查看springaopalliance包可以看到:interceptor继承自advice说明:拦截器也是一种通知.

就像AfterReturningAdvice,MethodBeforeAdvice一样.

 

3.AOP适用范围

我们说AOP适用于具有[横切]性质的系统级服务.比如:权限验证,事务处理,日志书写或审计等工作.这些工作的特点就是

在业务逻辑层,我们执行很多操作都会涉及到这些操作,比如要执行某个操作,你必须先要确定当前用户是否具有执行该操作

的权限,同时,这个操作应该做为一个事务进行事务的声明和最后的提交,然后,你还得把相关的日志记录下来,我们,几乎

日绝大多数的操作都需要这些操作,那么这就是它们的所谓"横切"特性的由来(这是相对于系统层次结构的"纵切"特性而言的)

AOP中,我们把分散于程序各个部分,解决同样问题的代码片段,称为问题的切面(或方面)

 

2007-6-21

______________________________________________________________________________________________

 

1.关于spring2.0 AOP的配置问题:

spring2.0:AOP的配置提供了三种方法:一种是在spring1.2之前就使用的唯一一种配制方式,使用spring提供的

AOP特定API,并使用java的代理机制实现运行时织入一种方式,这种方式无论是是从理解上还是从使用上都很复杂和繁琐,

而它的一个最大的问题在它将依赖于springAPI.

第二种方法是使用:JAVA5注解完成(需要JAVA5AspactJ的支持)

第三种方法是使用基于Schema的配置文件配置Spring AOP(需要).

以方法二和三都需要使用到AspectJaspectjweaver.jar来帮助解析切入点相关表达式.但是它们最大的优势在于不涉及

任何springAPI.

 

目前我个人倾向于使用第三种方法,对于基于Schema的配置文件配置Spring AOP需要注意的几点包括:

1.要在配制文件的Beans标签中加入对AOP标签的支持即加入如下语句:

xmlns:aop="http://www.springframework.org/schema/aop"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"

 

2.使用AspectJ的切入点表达式来描述切入点,通过的格式如下:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)

有“?”号的部分表示可省略的,modifers-pattern表示修饰符如publicprotected等,ret-type-pattern表示方法返回类型,declaring-type-pattern代表特定的类,name-pattern代表方法名称,param-pattern表示参数,throws-pattern表示抛出的异常。在切入点表达式中,可以使用*来代表任意字符,用..来表示任意个参数。

比如前面的示例中,execution(* springroad.demo.chap5.exampleB.Component.business*(..))就是一个基于AspectJ的切入点表达式。匹配springroad.demo.chap5.exampleB.Component类中以business开头,返回值为任意类型的方法。

 

修正一下:刚才看到spring2.0的手册,里面对第二种和第三种AOP声明风格做了详细比较,最后的结论是:@AspactJ风格的声明具有更大的优势,

并建议使用此方式!

 

2007-7-3

____________________________________________________________________________________________________________________

 

1.区分BeanFactoryFactoryBean

BeanFactory就不用多说了,但是这个FactoryBean就很有意思了.

spring中一共有两种bean:普通的bean和工厂bean(也就是FactoryBean,用来生产beanbean.)

FactoryBean是一个接口,它主要有三个方法:getObject(),getObjectType(),isSinglet()

要特别说明的是当我们使用BeanFactory来获得一个FactoryBean时有两种情况:

首先假设我们有一个FactoryBean名为地Fb,这个Bean专门用来得到一种Bean,这里假设是Date类型对象吧

现在如果我们使用BeanFactorygetBean("fb");那么我们得到的是一个表示当前时间的Date对象

而如果我们这样使用getBean("&fb"),那么我们得到才是一个Fb.

 

2007-7-4

_____________________________________________________________________________________________________________________

 

1.今天突然间想起了使用Srping API进行AOP配置中关于那段配置代理后,在程序中使用ApplicationContext获取需要加入切面的对象的

一段代码.就是下面的一段:

 

<beans>

<bean id="targetBean"

class="springroad.demo.chap5.exampleB.ComponentImpl">

</bean>

<bean id="adviceBean"

class="springroad.demo.chap5.exampleB.AdviceBean">

</bean>

<bean id="pointcutBean"

class="org.springframework.aop.support.NameMatchMethodPointcut">

<property name="mappedName" value="business*"></property>

</bean>

<bean id="aspectBean"

class="org.springframework.aop.support.DefaultPointcutAdvisor">

<property name="advice" ref="adviceBean"></property>

<property name="pointcut" ref="pointcutBean"></property>

</bean>

<bean id="component"

class="org.springframework.aop.framework.ProxyFactoryBean">

<property name="target" ref="targetBean"></property>

<property name="interceptorNames">

<list>

<value>aspectBean</value>

</list>

</property>

</bean>

</beans>

 

具体得到一个已经做好代理的目标对象的方法是:

ApplicationContext context=new org.springframework.context.support.ClassPathXmlApplicationContext("*.xml");

Component component=(Component)context.getBean("component");

 

我之前的疑问是context.getBean得到的分明是一个ProxyFactoryBean类型,它怎么能转换成Component类型呢?

想到昨天讲到的FactoryBean我终于明白了这其中的道理:就像昨天说的一样,由于component是一个ProxyFactoryBean类型

所以当我们使用context.getBean("component")时得到的是又调用了componentgetObject()方法而得到的它的代理对象,

并不是component代理本身,只有我们这样写context.getBean("&component"),得到的才是一个ProxyFactoryBean类型的对象.

 

23/06/2008

_____________________________________________________________________________________

 

1.关于@Autowired@Resource :

If you intend to express annotation-driven injection by name, do not primarily use @Autowired -

even if is technically capable of referring to a bean name through @Qualifier values. Instead,

prefer the JSR-250 @Resource annotation which is semantically defined to identify a specific target

component by its unique name, with the declared type being irrelevant for the matching process.

As a specific consequence of this semantic difference, beans which are themselves defined as a

collection or map type cannot be injected via @Autowired since type matching is not properly

注意:@Autowired是基于类型进行匹配的,虽然通过@Qualifier也是可匹配到具体的某个bean,但是这不是合理的使用方法,如果想基于名称进行查找,从而精确匹配到某个bean,应使用@Resource      

applicable to them. Use @Resource for such beans, referring to the specific collection/map bean by

unique name.

再补充一点:@Qualifier要配合@Autowired使用,虽然能过给@Qualifier设置beanID,可能保证按名称进行配线,但是这是不是@Qualifier设计意图。@Qualifier依然是基于类型进行匹配的,它的作用是通过添加限定条件来缩小@Autowired匹配的范围!

 

2.关于Joinpoint Pointcut

初接触AOP时,往往搞不懂这两个概念,一旦明白了才发现真是很简单的概念。

首先看Pointcut,其时这一个再简单不过的概念了,只是名子“古怪”,让人搞不明白。其时Pointcut就是指那些程序进行过程中的一些“点”或者说“时刻”,比如说一个方法的执行,一个字段改变(在Spring中,PointCut只能是一个方法的执行,也就是说Spring只能拦截方法的调用。)。这些点跟AOP没什么关系,但是从AOP的角度去观察,这些“点”却是可以被“拦截”的对象!而在一个程序里joinpoint到处都是,要拦截那些joinpoint就是Pointcut的工作了。简言之,Pointcut就是一组joinpoint的集合。因此说pointcutjoinpoint之间是一对多的关系。

 

24/06/2008

  

1.关于@Qualifierfallback规则。

@Qualifier用于同@AutoWire配合缩小基于类型匹配时的获选范围。如果IOC中没有声明@Quaulifier指定的限定符时,Spring会回退到将beanID作为限定符进行匹配。记住,如果此时再匹配不到,Spring是不会回退到基于类型的匹配上(这个@Quaulifier的初衷已经背道而驰了!)此是会抛出异常!@Resource才是先基于名称进行匹配,如果没有才回退到基于类型上来。

 

26/06/2008

  

 

Spring包结构以及各个包之间引用关系说明关键字:    Spring     Spring 包结构说明:spring.jar

--------------------------------------------------------------------------------

包含有完整发布的单个jar包。他包含有除spring-mock.jar之外的所有jar。原因是,spring-mock.jar只有在开发环境中才会用到,而且仅仅是作为一个辅助测试类存在。除了spring.jarspring还包括13个独立的jar文件,他们各自包含这spring各自的组件。所以,如果你可以明确知道使用spring的哪些资源文件时,就没必要去直接引入spring.jar,但有时候spring.jar的引入也是最偷懒和最直接的方式。spring-core.jar

--------------------------------------------------------------------------------

这个jar包含spring框架基本的核心工具类,spring其他组件都要使用到这个包里的类。是其他组件的基本核心。spring-beans.jar

--------------------------------------------------------------------------------

这个jar是所有应用都要用到的,他包含访问配置文件,创建和管理bean以及进行Inversion of Control / Dependency InjectionIoC/DI)操作相关的所有类如果应用只需基本的IoC/DI支持,引入spring-core.jarspring-beans.jar就已经足够了。spring-aop.jar

--------------------------------------------------------------------------------

包含一些使用AOP特性时需要用到的一些类。在使用spring AOP特性如Declarative Transaction Management(事务管理)就需要用到这个jar文件。

spring-context.jar

--------------------------------------------------------------------------------

这个jar文件为spring提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类。JNDI所需的全部类,用来跟模板引擎集成(VelocityFreeMarkerJasperReports)的类,以及校验相关类。

spring-dao.jar

--------------------------------------------------------------------------------

包含Spring DAOSpring Transaction进行数据访问的所有类,为了使用声明性事务支持还需要在自己的应用里包含spring-aop.jarspring-hibernate.jar

--------------------------------------------------------------------------------

是对Hibernate支持的所有类。

spring-orm.jar

--------------------------------------------------------------------------------

jarspring DAO特性集合进行了扩展,使其支持iBATISJDOOJBTopLink,由于springhibernate独立成包了,因此在这里没有在支持hibernate。这个文件里大部分的类都依赖spring-dao.jar中的类。spring-remoting.jar

--------------------------------------------------------------------------------

这个包提供对EJBJMS以及远程调用(RMIHessianBurlapHttp Invoker JAX-RPC)相关的类spring-support.jar

--------------------------------------------------------------------------------

该组件提供对Cacheehcache)、JCAJMX,邮件服务(Java MailCOS Mail),计划任务SchedulingTimerQuartz)支持的类spring-web.jar

--------------------------------------------------------------------------------

如果web开发中开发,而且用到用到spring框架,那就应该引入这个包,该组件包括WebApplicationContext特性的类、strutsJSF集成类、文件上传的支持类、Filter类和大量工具辅助类。

spring-webmvc.jar

--------------------------------------------------------------------------------

该组件包含Spring MVC框架相关的所有类,包含国际化、标签、Theme、视图展现的FreeMarkerJasperReportsTilesVelocityXSLT相关类。如果使用了独立的MVC框架则该组件不再需要。

spring-mock.jar

--------------------------------------------------------------------------------

这个文件中包含Spring一整套mock类来辅助应用的测试。spring测试套件使用了大量的mock类,这样测试就更加简单了。由于可以对HttpServletRequestHttpServletResponse进行模拟,使得对web进行单元测试更加方便。包间引用关系:Spring中各个包引入之前都需要保证引入 commons-logging.jar

spring-core.jar commons-collections.jarspring-core.jar 是以下其他各个组件的基础。

 

spring-beans.jar spring-core.jar/cglib-nodep-2.1_3.jar

spring-aop.jar spring-core.jar/spring-beans.jar/cglib-nodep-2.1_3.jar/aopalliance.jar

spring-context.jar spring-core.jar/spring-beans.jar/spring-aop.jar/commons-collections.jar/aopalliance.jar

spring-dao.jar spring-core.jar/spring-beans.jar/spring-aop.jar/spring-context.jar

spring-jdbc.jar spring-core.jar/spring-beans.jar/spring-dao.jar

spring-web.jar spring-core.jar/spring-beans.jar/spring-context.jar

spring-webmvc.jar spring-core.jar/spring-beans.jar/spring-context.jar/spring-web.jar

spring-hibernate.jar spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-jdbc.jar/spring-orm.jar/spring-web.jar/spring-webmvc.jar

spring-orm.jar spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-jdbc.jar/spring-web.jar/spring-webmvc.jar

spring-remoting.jar spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-context.jar/spring-web.jar/spring-webmvc.jar

spring-support.jar spring-core.jar/spring-beans.jar/spring-aop.jar/spring-dao.jar/spring-context.jar/spring-jdbc.jar

spring-mock.jar spring-core.jar/spring-beans.jar/spring-dao.jar/spring-context.jar/spring-jdbc.jar

2009-12-22

关于Spring的基于Proxy的AOP实现:

我们知道,在Spring中,默认的AOP实现方式是通过代理(JDK的动态代理和CGLIB),既然是基于代理,这里就有些“特殊”情况是代理做不到的:

对Protected/Private方法和构造方法无法拦截,对内部被调用的方法无法拦截!如果对上面的情况进行拦截,需要使用spring的native AspectJ weaving。

关于AOP实现方式的选择:

有两种方式可供选择:使用Spring的基于代理的AOP实现和使用AspectJ

显然,方式一的问题是:它只能拦截SpringIOC窗口里的Bean,像Domain Object就无法拦截!这时只能使用AspectJ.一个例子就是oobbs系统中那个ThreadPublishService,这个服务要拦截领域对象Thread的addPost方法,进而向订阅用户发送消息。这里,被拦截对象Thread不在Spring管理范围内!此时,只能通过AspectJ来实现了。

jdbc.jar

jdbc.jarjdbc.jar

 

 

2009-12-22

© 著作权归作者所有

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
ZK7.0.3中从MongoDB下载文件

问题 在完成Spring从MongoDB中下载文件之GridFS之后,现在需要在ZK7.0.3的ViewModel中下载该文件。 思路 先从MongoDB获取到,以及把转化为ZK的Filedownload能够使用的进行文件下载。 实现 导...

亚林瓜子 ⋅ 06/12 ⋅ 0

tomcat中配置文件之setenv.sh

问题 怎么设置tomcat的配置java_opts环境变量,并且不影响整个操作系统的环境变量? 解决 安装Tomcat 下载Tomcat的zip包 解压zip包 给Tomcat执行权限 Tomcat的hello world 然后,去找个浏览器...

亚林瓜子 ⋅ 04/24 ⋅ 0

CentOS 6.5 安装JDK(包含卸载原有默认JDK)

卸载原有1.7 JDK 查看是否安装了JDK 若有内容就进一步查看JDK信息 卸载 安装jdk ===================================== 安装wget 新建目录 进入目录 下载JDK 安装JDK 配置环境变量 往文件内...

阿白 ⋅ 05/23 ⋅ 0

Java就业变难了?你需要对自己有点信心

伴随着IT的火热,越来越多的人进入了IT领域,这在进一步推动着IT发展的同时也极大增加了就业压力。伴随着激烈的岗位竞争,越来越多的人开始感叹工作难找,越火的行业越是如此,Java自是首当其...

糖宝_d864 ⋅ 06/08 ⋅ 0

sharding-jdbc源码分析—准备工作

原文作者:阿飞Javaer 原文链接:https://www.jianshu.com/p/7831817c1da8 接下来对sharding-jdbc源码的分析基于tag为源码,根据sharding-jdbc Features深入学习sharding-jdbc的几个主要特性...

飞哥-Javaer ⋅ 05/03 ⋅ 0

MVN package install error javac: invalid target release: 1.8

现象: --------------------------------- [ERROR] Failure executing javac, but could not parse the error: javac: invalid target release: 1.8 Usage: javac <options> <source files>......

孟飞阳 ⋅ 05/04 ⋅ 0

Oracle Java Mission Control 帮助

缩写 含义 JDK Java 开发工具包 JDP Java Discovery Protocol JFR Java 飞行记录器 JMC Java Mission Control JMX Java Management Extensions JVM Java 虚拟机 MBean 托管 Bean (Java) RCP ......

光斑 ⋅ 04/27 ⋅ 0

培训云计算学校,虚拟机基本结构讲解

我们要对JVM虚拟机的结构有一个感性的认知。毕竟我们不是编程人员,认知程度达不到那么深入。一个运行时的Java虚拟机实例的天职是:负责运行一个java程序。当启动一个Java程序时,一个虚拟机...

长沙千锋 ⋅ 05/17 ⋅ 0

云计算高级培训,Tomcat运维JVM 虚拟机常识

云计算高级培训,Tomcat运维JVM 虚拟机常识,作为了解JVM 虚拟机的开始。我们很有必要弄明白以下问题。 所谓虚拟机,就是一台虚拟的计算机。他是一款软件,用来执行一系列虚拟计算机指令。大...

长沙千锋 ⋅ 05/17 ⋅ 0

14、Java并发性和多线程-Java ThreadLocal

以下内容转自http://ifeve.com/java-theadlocal/: Java中的ThreadLocal类可以让你创建的变量只被同一个线程进行读和写操作。因此,尽管有两个线程同时执行一段相同的代码,而且这段代码又有...

easonjim ⋅ 2017/06/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

磁盘管理—逻辑卷lvm

4.10-4.12 lvm 操作流程: 磁盘分区-->创建物理卷-->划分为卷组-->划分成逻辑卷-->格式化、挂载-->扩容。 磁盘分区 注: 创建分区时需要更改其文件类型为lvm(代码8e) 分区 3 已设置为 Linu...

弓正 ⋅ 11分钟前 ⋅ 0

Spring源码解析(六)——实例创建(上)

前言 经过前期所有的准备工作,Spring已经获取到需要创建实例的 beanName 和对应创建所需要信息 BeanDefinition,接下来就是实例创建的过程,由于该过程涉及到大量源码,所以将分为多个章节进...

MarvelCode ⋅ 31分钟前 ⋅ 0

a href="#"

<a href="#">是链接到本页,因为你有的时候需要有个链接的样式,但是又不希望他跳转,这样写,你可以把这个页面去试试

颖伙虫 ⋅ 38分钟前 ⋅ 0

js模拟栈和队列

栈和队列 栈:LIFO(先进后出)一种数据结构 队列:LILO(先进先出)一种数据结构 使用的js方法 1.push();可以接收任意数量的参数,把它们逐个推进队尾(数组末尾),并返回修改后的数组长度。 2....

LIAOJIN1 ⋅ 38分钟前 ⋅ 0

180619-Yaml文件语法及读写小结

Yaml文件小结 Yaml文件有自己独立的语法,常用作配置文件使用,相比较于xml和json而言,减少很多不必要的标签或者括号,阅读也更加清晰简单;本篇主要介绍下YAML文件的基本语法,以及如何在J...

小灰灰Blog ⋅ 46分钟前 ⋅ 0

IEC60870-5-104规约传送原因

1:周期循环2:背景扫描3:自发4:初始化5:请求6:激活7:激活确认8:停止激活9:停止激活确认10:激活结束11:远程命令引起的返送信息12:当地命令引起的返送信息13:文件传送20:响应总召...

始终初心 ⋅ 59分钟前 ⋅ 0

【图文经典版】冒泡排序

1、可视化排序过程 对{ 6, 5, 3, 1, 8, 7, 2, 4 }进行冒泡排序的可视化动态过程如下 2、代码实现    public void contextLoads() {// 冒泡排序int[] a = { 6, 5, 3, 1, 8, 7, 2, ...

pocher ⋅ 今天 ⋅ 0

ORA-12537 TNS-12560 TNS-00530 ora-609解决

oracle 11g不能连接,卡住,ORA-12537 TNS-12560 TNS-00530 TNS-12502 tns-12505 ora-609 Windows Error: 54: Unknown error 解决方案。 今天折腾了一下午,为了查这个问题。。找了N多方案,...

lanybass ⋅ 今天 ⋅ 0

IDEA反向映射Mybatis

1.首先在pom文件的plugins中添加maven对mybatis-generator插件的支持 ` <!-- mybatis逆向工程 --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-ma......

lichengyou20 ⋅ 今天 ⋅ 0

4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例

准备磁盘分区 fdisk /dev/sdb n 创建三个新分区,分别1G t 改变分区类型为8e 准备物理卷 pvcreate /dev/sdb1 pvcreate /dev/sdb2 pvcreate /dev/sdb3 pvdisplay/pvs 列出当前的物理卷 pvremo...

Linux_老吴 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部