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+SpringMVC+MyBatis+Maven框架整合