spring核心点总结

来源:互联网 发布:网络空间安全 科研 编辑:程序博客网 时间:2024/05/22 04:55

1. IoC

ApplicationContext  context =new ClassPathXmlApplicationContext("applcationcontext.xml")

//ApplicationContext接口包括:ClassPathXmlApplicationContext. FilesystemXmlApplicationContext,

//根据名称或者id获取,bean的id和名称是唯一的

SequenceGenerator  generator=context.getBean("sequencegenerator")


2.依赖注入分为:设置注入和构造函数注

2.1  设置注入的属性可以是基本类型,也可以是对象关键配置示例如下:

 <bean  id=""  class="">

    <property   name="age"  value="28"/>   

    <property  name="stone"  ref="bigStone"/>

     此处也可以写成 

     <property  name="stone">  <ref  bean=""/>  </property>

      如果指引的bean在一个xml文件中,也可以写成:

      <property  name="stone">  <ref  local=""/>  </property>

</bean>

<bean  id="bigStone"  class="com.kerry.BigStone"/>

2.2 构造注入,通过构造函数注入,用index区分多个函数

  <bean  id=""  class="">

             <constructor-arg  index="0">

                 <ref  bean="bigStone"/>

              <constructor-arg/>

              <constructor-arg index="1">

                   <value> This is second parameter </value>   

              <constructor-arg/>

              使用constructor-arg的type属性,避免构造子冲突

           <constructor-arg  index="3"  type="string">

              <value>This is third parameter</value>

           <constructor-arg/>           

      </bean>

也可以这样简单写成:

             <bean  id=""  class="">

                   <constructor-arg    value="" /> 

                    <constructor-arg    value="" /> 

              </bean>

3 AOP

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 1  /** 
 2  * 
 3   */ 
 4  package  com.dragon.study;
 5  
 6  /** 
 7  *  @author  dragon
 8  *
 9   */ 
10  public   interface  IStudent  {
11     
12      public   void  addStudent(String name);
13 
14

 目标类StudentImpl


?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 2  
 3   */ 
 4  package  com.dragon.study.Impl;
 5  
 6  import  com.dragon.study.IStudent;
 7  
 8  /** 
 9  *  @author  dragon
10  *
11   */ 
12  public   class  StudentImpl  implements  IStudent {
13  
14        public   void  addStudent(String name) {
15          System.out.println( " 欢迎  " + name + "  你加入Spring家庭! " );
16      
17 
18

   前置通知:BeforeAdvice.java

   

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 package  com.dragon.Advice;
 5  
 6  import  java.lang.reflect.Method;
 7  
 8  import  org.springframework.aop.MethodBeforeAdvice;
 9  
10  /** 
11  *  @author  dragon
12  *
13   */ 
14  public   class  BeforeAdvice  implements  MethodBeforeAdvice {
15  
16        public   void  before(Method method,Object[] args, Object target)
17                  throws  Throwable {
18           
19           System.out.println( " 这是BeforeAdvice类的before方法. " );
20           
21       
22 }

  后置通知:AfterAdvice.java

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.dragon.Advice;
 5
 6import java.lang.reflect.Method;
 7
 8import org.springframework.aop.AfterReturningAdvice;
 9
10/**
11 * @author dragon
12 *
13 */
14public class AfterAdvice implements AfterReturningAdvice{
15    
16    public void afterReturning(Object returnValue ,Method method,
17                   Object[] args,Object target) throws Throwable{
18        System.out.println("这是AfterAdvice类的afterReturning方法.");
19    }
20      
21
22}

  

环绕通知:CompareInterceptor.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.dragon.Advice;
 5
 6import org.aopalliance.intercept.MethodInterceptor;
 7import org.aopalliance.intercept.MethodInvocation;
 8
 9
10/**
11 * @author dragon
12 *
13 */
14public class CompareInterceptor implements MethodInterceptor{
15
16      public Object invoke(MethodInvocation invocation) throws Throwable{
17          Object result = null;
18         String stu_name = invocation.getArguments()[0].toString();
19         if ( stu_name.equals("dragon")){
20             //如果学生是dragon时,执行目标方法,
21              result= invocation.proceed();
22              
23         else{
24             System.out.println("此学生是"+stu_name+"而不是dragon,不批准其加入.");
25         }
26        
27          return result;
28      }
29}

配置文件applicationContext.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 1<?xml version="1.0" encoding="UTF-8"?>
 2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 3
 4<beans>
 5
 6<bean id="beforeAdvice" class="com.dragon.Advice.BeforeAdvice"></bean>
 7<bean id="afterAdvice" class="com.dragon.Advice.AfterAdvice"></bean>
 8<bean id="compareInterceptor" class="com.dragon.Advice.CompareInterceptor"></bean>
 9<bean id="studenttarget" class="com.dragon.study.Impl.StudentImpl"></bean>
10
11<bean id="student" class="org.springframework.aop.framework.ProxyFactoryBean">
12  <property name="proxyInterfaces">
13    <value>com.dragon.study.IStudent</value>
14  </property>
15  <property name="interceptorNames">
16    <list>
17     <value>beforeAdvice</value>
18     <value>afterAdvice</value>
19    <value>compareInterceptor</value>  
20    </list>
21  </property>
22  <property name="target">
23    <ref bean="studenttarget"/>
24  </property>
25
26</bean>
27
28
29
30
31</beans>

现在开始写测试类,Test.java


?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
4package com;
 5
 6import org.springframework.context.ApplicationContext;
 7import org.springframework.context.support.FileSystemXmlApplicationContext;
 8
 9import com.dragon.study.IStudent;
10
11/**
12 * @author dragon
13 *
14 */
15public class Test {
16
17    /**
18     * @param args
19     */
20    public static void main(String[] args) {
21        // TODO Auto-generated method stub
22      ApplicationContext ctx = 
23          new FileSystemXmlApplicationContext("/com/dragon/applicationContext.xml");
24      
25      IStudent person = (IStudent)ctx.getBean("student");
26      person.addStudent("dragon");
27      
28//      person.addStudent("javadragon");
29    }
30
31}

AOP部分代码来自 :http://www.blogjava.net/javadragon/archive/2006/12/03/85115.html

0 0
原创粉丝点击