spring

1、环境搭建

a)只用IOC功能

spring.jar、jarkata-commons.jar/commons-loggin.jar

2、IOC容器

   A)实例化具体bean

   B)动态装配

3、AOP支持

    A)安全检查

    B)事务管理

4、Spring IOC配置与应用

    1、FAQ:不给提示

                     A)window-preferences-myeclipse-xml-xml catalog

                    B) User spefied Entries -add

                             i、Location:.../spring2.5.6/dist\resources\spring-beans-2.5.xsd

                             ii、   URI:

                                  file:/spring2.5.6/dist\resources\spring-beans-2.5.xsd

                            iii、  key type:   schema Location

                           iv、  Key

                                        http://www.springframework.org/schema/beans  这个是些配置文件XML中的头信息

               2、注入类型

                    A) setter方法注入

                     B) 构造方法的注入

                   C)  接口注入(也称方法注入)

               3、id vs  name

                  A)Spring_0400_IOC_id_Name  这个是测试项目的实例  下面同此

                  B)  name与ID没有什么区别只是name 可以用特殊的字符如_等

               4、简单属性的注入

                     A) Spring_0500_IOC_SimpleProperty

                     B)  <property name=... value=....>

               5、bean中属性的范围scope

                   A)  Spring_0600_IOC_Bean_Scope

                   B)   singleton 单列

                   C)    proptotype 每次都创建新的对象原型,还有与web 相关的属性,但是都会提示

               6、集合注入

                     A)  Spring_0700_IOC_Collections

                     B)   很少用 但是不理解,参考文档

                7、自动装配

                    A)   Spring_0800_IOC_AutoWire

                    B)   autowire="byName"/"byType"

                    C)   如果所有的bean都用同一种,可以使用beans的属性:default-autowire

                8、生命周期

                      A)  lazy-init(不重要)

                      B)  init-method destory-method 不要和scope="prototype"一起使用,这个相当在方法的前面和后   面加入日志,自己写的bean很少用但是别人提供的会使用,如datasource连接池

                 9、Annotation 第一步:

                     A) 修改XML文件,参考文档<context: annotation-config />

                       怎样在Java代码中有自动提示功能:如加入@就有提示

                       在window-preferences-Java-Editor-content Assist即可

                  这边要有其功能也要配置schame模式的路径,具体方法参见4中FAQ

                  10、   如果自动注入的方法有两个bean注入,系统无法知道注入那个bean,所以就要

                     @Autowired

                      public void setUserDAO(@Qualifier("u这个是在配置文件中bean的命名")  UserDAO userDao){}

                      应用的不是很多

                   11、在使用@Resource(一般常用的)

                             A) 必须在j2EE中加入common-annoations.jar

                             B) 默认是按照名称:名称找不到,按类型

                             C)  可以指定特定的类型如:

                                   @Resource(name="u")

                      public void setUserDAO(UserDAO userDao){}

                            D) 但是如果手中没有源码,就可以在XML文件中配置,这个第2中方式

                 12、使用@Component,@Service,@Controller,@Repository作用都是一样,看以后的版本是否有扩充

                     A>要在XML文件中beans标签中加入

                          <context:component-scan base-package="要在自己哪个包中注入的bean如:com.hewen">

                          就会在com.hewen包下扫描所有的类,直到发现有类加入@component.

                         然后 @Resource

                         public void setUserDAO(UserDAO userDao){}此方法就会注入有@component类中,

                        但是如果有多个类加入了@component的组件,就要为组件命名如:@component("u")

                          要注入的方法前面加入@Resource(name="u"),这样的好处就不需要在配置文件中写bean来配置类,

                        一般情况下记得要写名字如:@component("userService")

                       B) 开发效率高

                  13、@scope与写在bean写XML中的scope一样,

                         @PostConstruct=init-method;  @PreDestory=destory-method

 注意以上13条忘记可以参见自己的源码或者查看文档

五、 AOP的概念

   面向切面编程,某个模块可有可无可以在配置文件进行处理

    动态代理的应用:事务管理、做日志、做权限管理、效率的检查

     别如说过滤器

 1、配置新的配置文件:

         首先要加<aop:aspectj-autoproxy />

         然后加入 xmlns:aop="http://www.springframework.org/schema/aop"

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

       如果需要在写的时候需要提示:则需要在myeclipse进行配置,详细操作见Spring IOC配置与应用

    FAQ:不给提示.

 2、<aop:aspectj-autoproxy />aspectj是专门装配动态代理的框架,是一个面向切面的框架

 3、如需要装配动态代理的标签就需要加入两个Jar文件,分别为aspectjtr.jar、aspectjweaver.jar

 4、常见的Annotation:

   可以代理构造方法、属性、异常等等详细的配置可以查看文档

   A)  JoinPoint  是连接点如:

        @Before("execution(public void com.bjsxt.dao.impl.UserDAOImpl.save(com.bjsxt.model.User))")
       public void before(){
          System.out.println("method start");
       }

           在此类上要加入 @Aspect和@Component
       B)Pointcut 相当于JoinPoint的集合如:

            @Pointcut("execution(public * com.bjsxt.service..*.add(..))") com.bjsxt.service在命名空间下所有add的方法   都进行动态代理
      C)Before
      D)AfterReturning
      E)AfterThrowing
      F)After
      G)Around 类似于dofilter

         @Around("com.xyz.myapp.SystemArchitecture.businessService()")
        public ObjectdoBasicProfiling(ProceedingJoinPointpjp) throws Throwable{
        //startstopwatch
       ObjectretVal=pjp.proceed();要调用此函数方法才能往下调用,相当于模式的责任链
       //stopstopwatch
         return retVal;
}

             如果方法前后命名空间重复就可以这么定义:

                 @Pointcut("execution(public * com.bjsxt.dao..*.*(..))")
         public void myMethod(){};
        @Before("myMethod()")
        public void before(){
             System.out.println("method before");
           };
          @AfterReturning("myMethod()")
         public void afterMethod(){
           System.out.println("method after");
           };

5、当程序报异常无法加载动态代理类,出现GBL什么之类的故需要jar文件,

    因为一个类需要进行代理的时候,必须实现InvocationHandler接口,就会利用JDK动态代理获取代理类,

    UserDAO userDAO = new UserDAOImpl();
        LogInterceptor li = new LogInterceptor();//该类实现了InvocationHandler接口
        li.setTarget(userDAO);
        UserDAO userDAOProxy = (UserDAO)Proxy.newProxyInstance(userDAO.getClass().getClassLoader(),   userDAO.getClass().getInterfaces(), li);//获取代理类,第一个参数获取被代理类的类加载器,第二个参数是被代理类的实现的接口,第三个参数是处理被代理类的类既是实现InvocationHandler接口

       System.out.println(userDAOProxy.getClass());//可以进行测试是否得到代理对象

       userDAOProxy.delete();
        userDAOProxy.save(new User());

    如果没有实现此接口,那么实行2进制码的类库进行代理,需要加入jar文件cglib-nodep.jar

 

 

你可能感兴趣的:(spring,AOP,bean,配置管理,IOC)