Spring框架学习

Posted 三一七零二

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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方式)

以上是关于Spring框架学习的主要内容,如果未能解决你的问题,请参考以下文章

万字Spring框架学习总结(附核心代码详细注释)

Spring+SpringMVC+MyBatis+Maven框架整合

Spring 框架学习——IOC思想原型及实质

00. Spring框架学习开篇

spring boot框架学习学前掌握之重要注解-通过java的配置方式进行配置spring

spring boot框架学习学前掌握之重要注解-通过java的配置方式进行配置spring