zoukankan      html  css  js  c++  java
  • spring框架原理(context指语境、上下文)

    Spring

    一、spring应用:

    1、引入jar包

    2、配置依赖关系:

    src下创建benas.xml用来配置依赖关系,必有的三个属性xmlns、xmlns:xsi、xsi:schemaLocation不能丢

    <beans xmlns="http://www.springframework.org/schema/beans" 

           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

           xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  

    </beans>

    3、依赖注入:(不管是否使用注解,被注入的对象必须在配置文件中有一个对应的bean,否则会报错没有可被注入的bean)

    1》先在bean.xml配置文件中配置要在哪些类中进行注入。

    2》注入:

    set方法注入

    在bean标签中用property标签指定要给bean标签对应类注入的属性(实例)的类型,property标签的name属性用来指定bean对应类中的属性名,ref用来指定给属性传入的对象的类对应bean的id名(注入实例后便可在程序中使用该实例调用其所有方法和属性),给属性的值注入字符串的话可以用value直接替代ref。

    @Autowired注解注入

    配置文件根节点配置<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>,在要注入的属性前写@Autowired注解(多余配置property标签会报错)

    bean标签常用属性:

    lazy-init:懒初始化属性设置为false时该bean会在项目启动xml文件被加载时立即进行实例化和初始化。

    bean的name属性和id属性区别:

    id用来标识bean,是唯一的,且只有一个;name定义的是bean的alias(别名),可以有多个,并可能与其他的bean重名。

    ref该元素用来将bean中指定属性的值设置为对容器中的另外一个bean的引用

     @Autowired注解和@Resource注解的区别:

    autowired默认按类型装配,但有类型相同的两个bean时或没有时会报错,spring容器只允许注入一个bean,使用一下方式可以解决:

    @Autowired
        @Qualifier("userDao")
        private UserDao userDao; 
    @Resource注解写出name的话就是按name装配,不写的话默认按name装配,name找不到最后才按类型装配。



    二、注解:

           http://blog.csdn.net/wangyangzhizhou/article/details/51698638

           注解是JDK1.5开始引入的特性,用于对代码(包,类,接口,字段,方法,参数等)进行说明。注解在编译时由编译器进行处理,编译器会对注解符号处理并附加到class结构中。

           注解可分为三类:

    java自带标准注解如@Override,用于标明重写某个方法。

    元注解(用以定义注解的注解)如@Retention用于表明注解被保留的阶段  @Target用于标明注解使用的范围  @Inherited表明注解可继承 @Documented表明是否生成javadoc文档。

    自定义注解——根据自己的需求定义注解,并可用元注解对自定义注解进行注解。         

    @Autowired与@Resource都可以用来装配bean。前者属于spring的注解,后者是J2EE的注解。

    三、IOC原理:

    IOC表示控制反转,其含义是创建对象的控制权从应用程序中转移到了容器。开发者使用对象方式得到简化是IOC的结果,并不是其本身含义。。

    四、实现方式:依赖注入

    依赖注入的方式——注解注入,set注入,构造函数注入

     getDeclaredField("属性名")和getDeclaredFields()得到的仅仅是属性的绝对路径,不是属性值哦。

    getFields()只能获取public的字段,包括父类的。
    而getDeclaredFields()只能获取自己声明/宣告的各种字段,包括public,protected,private。不能获取父类中宣告/声明的字段。

     解耦和AOP相关?IOC容器由谁调用?

    五、AOP原理:

    六、spring如何将service注入到servlet中?

    Servlet和Filter无法使用自动注入属性,因为这两个都是由servlet容器管理而不是ioc容器。此时用加载xml文件(专业术语叫创建和初始化IOC容器)的四种方式之一来加载再获取bean。也可以在web.xml配置监听器来完成IOC容器创建工作。

    http://blog.csdn.net/l1028386804/article/details/45696707

    1.重写servlet的init方法

    2.

    自己的经验:

    ApplicationContext ctx =new ClassPathXmlApplicationContext("config/spring/beans.xml");//这只是一种加载配置文件(创建IOC容器)的方式
    SpringTest service=(SpringTest) ctx.getBean("springTest",SpringTest.class);

    然后再用set方法注入

                                                                                   从配置文件加载开始

    xml是spring最常用的应用系统配置源,spring中的几种容器都支持用xml来配置bean。包括:XMLBeanFactory,ClassPathXMLApplicationContext,FileSystemXMLApplicationContext,XMLWebApplicationContext。

    1、Resource  resource=new ClassPathResource("appcontext.xml");

          BeanFactory   factory=new  XMLBeanFactory(resource);

    2、ApplicationContext  ctx=new  ClassPathXMLApplicationContext("appcontext.xml");

    3、4、。。。。。。

    可以用这四种方式在代码里显式得创建IOC容器,也可以在web.xml中配置监听器来完成。比如自己的servlet中就是用到代码显式的手动加载xml配置文件的方法。

                                                                              spring配置文件的相互引用

    http://blog.csdn.net/m0_37630602/article/details/70569956

    工作项目采用

    <!--Spring ApplicationContext 载入 -->
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--
    Spring ApplicationContext配置文件的路径,可使用通配符,用于后面的Spring Context Loader
    -->
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    classpath*:config/spring/**/*Context.xml
    </param-value>
    </context-param>

    项目启动即进行实例化:

    新生的小心情
  • 相关阅读:
    Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- ApiWrapper
    Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- Messenger
    Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- AIDL
    Android Stutio -- 编译报错: Error:File path too long on Windows, keep below 240
    Android -- 手势操作识别
    Android -- 屏幕适配
    Android -- android:configChanges
    Java -- Date相关
    Java -- File
    links
  • 原文地址:https://www.cnblogs.com/jianmianruxin/p/7215219.html
Copyright © 2011-2022 走看看