zoukankan      html  css  js  c++  java
  • Spring框架学习(一)

    Spring框架的两个核心分别是 IOC(Inversion of Control)控制反转 和 AOP(Asepect-Oriented Programming)面向切面编程。

    此外,有的书本上将写的是DI(Dependency Injection)依赖注入和AOP。实际上,DI和IOC的目标和方式非常类似,本质上都是将原来需要通过new实例化的对象转交给Spring负责。

     

    一。IOC实现

    1.首先需要导入jar包,至少4个核心组件和1个日志包commos.log.jar

    2.新建applicationContext.xml文件(一般在src下建立,这样更方便)。applicationContext.xml的配置信息最终都会存储到Spring的ApplicationContext容器中

    3.对applicationContext.xml文件进行配置。首先需要配置schema(一种类似DTD的xml语法检查器),可以通过如下方式获得

    ctrl+F搜索xmlns即可得到需要的基本schema,然后将其复制到applicationContext.xml文件中

     

    4.编写测试方法获得bean对象。需要加载applicationContext.xml文件

     1 package com.xl.test;
     2 
     3 import org.springframework.context.ApplicationContext;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 public class Test {
     7     public static void main(String[] args) {
     8         //获得ApplicationContext容器
     9         ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    10         //根据bean中的id值获得装配的对象,第二个参数通过反射来指定返回的类型,若不指定则返回的是Object类型的对象
    11         Demo demo = ac.getBean("demo", Demo.class);
    12         //ac.getBeanDefinitionNames()返回String[] 代表ApplicationContext中装配的所有对象的名称;
    13         demo.demo1();
    14     }
    15 }

    二。创建对象的方式

      上述一种使用的是通过无参构造方法创建对象(默认),此外还可以通过有参构造函数创建、通过实例工厂创建、通过静态工厂创建

    1.有参构造函数创建:(1)需要在类中提供有参构造方法 (2)需要在applicationContext.xml中设置调用的哪个构造方法,并通过指定标签传入参数

     1 package com.xl.test;
     2 
     3 public class Demo2 {
     4     private String name;
     5     private Demo demo;
     6     
     7     public Demo2(String name) {
     8         this.name = name;
     9     }
    10     
    11     public void test() {
    12         System.out.println("这是我的名字"+name+"和小弟"+demo.test());
    13     }
    14     
    15     public Demo2(String name, Demo demo) {
    16         this.name = name;
    17         this.demo = demo;
    18     }
    19 }

      

    2.实例工厂创建对象

    首先需要编写一个工厂类,然后创建一个工厂bean

        <!-- 通过实例工厂创建对象 -->
        <!-- 先配置工厂对象 -->
        <bean id="demoFactory" class="com.xl.test.DemoFactory"></bean>
        <!-- 配置需要创建的对象
            id为返回的对象名,factory-bean关联工厂对象的id,factory-method中写入工厂中创建相应对象的方法
         -->
        <bean id="mydemo" factory-bean="demoFactory" factory-method="newInstance"></bean>

    3.静态工厂创建对象

    这种方法不需要事先创建工厂bean,其他的只需要写一个静态工厂即可(在方法中添加static修饰符)

    三。DI依赖注入

    当一个类A中需要依赖另一个类B对象时,把B赋值给A的过程就叫做依赖注入

     1     
     2     <!-- 依赖注入 -->
     3     <bean id="demo" class="com.xl.test.Demo"></bean>
     4     <!-- 无参构造函数创建Demo3对象 -->
     5     <bean id="demo3" class="com.xl.test.Demo3">
     6         <!-- 通过DI往demo3中注入对象demo -->
     7         <property name="mydemo" ref="demo"></property>
     8         <!-- 下面为给Bean的属性注入,通过set方法,即需要在类中提供set方法 -->
     9         <!-- 属性是数组 -->
    10         <property name="myarr" >
    11             <!-- value-type指定出入值的类型 -->
    12             <array value-type="java.lang.Integer">
    13                 <value>1</value>
    14                 <value>2</value>
    15                 <value>3</value>
    16             </array>
    17         </property>
    18         
    19         <!-- 属性是map -->
    20         <property name="mymap">
    21             <!-- 需要指定map的键值对数据类型 -->
    22             <map key-type="java.lang.String" value-type="java.lang.String">
    23                 <!-- 通过entry标签的key和value给map赋值 -->
    24                 <entry key="a" value="你好"></entry>
    25                 <entry key="b" value="再见"></entry>
    26             </map>
    27         </property>
    28         
    29         <!-- 属性是Set -->
    30         <property name="myset">
    31             <set value-type="java.lang.String">
    32                 <value>"你好"</value>
    33                 <value>"我也好"</value>
    34             </set>
    35         </property>
    36         
    37         <!-- 属性是List -->
    38         <property name="mylist">
    39             <list value-type="java.lang.String">
    40                 <value>"wawawa"</value>
    41                 <value>"hahahah"</value>
    42             </list>
    43         </property>
    44         
    45         <!-- 普通属性 -->
    46         <property name="name" value="我是demo3的name"></property>
    47     </bean>

    值得注意的是,我这里属性注入使用的是Set注入方式,即需要在类中提供相应属性的Set方法

     ——————————————————————————————分界线————————————————————————————————————

    3.12日更新

    Spring实战第四版中还提到,Bean对象的装配(即IOC的实现)还有两种方式

    (1)通过注解 @Component@ComponentScan 来实现 (书中称为自动装配方式)

    (2)通过 @Bean@Configuration 以及 @ContextConfiguration的方式来实现(书中称为JavaConfig方式)

  • 相关阅读:
    c++---------------------------->>>>>>>>>>>>>>>>>>遍历文件工具
    图像分割------>>>>>>性能提升30%以上!产业SOTA的实时实例分割算法SOLOv2,更快更强!
    不用绿幕也能实时抠图,商汤等提出只需单张图像、单个模型的新方法MODNet
    目标检测框回归问题
    NeurIPS 2020 | 微软亚洲研究院论文摘录之目标检测篇
    动态规划算法
    FCOS环境搭建配置
    conda--------------------------------->虚拟环境创建
    W: Failed to fetch http://ppa.launchpad.ne
    shell-code-5-函数
  • 原文地址:https://www.cnblogs.com/xiang9286/p/10498518.html
Copyright © 2011-2022 走看看