请选择 进入手机版 | 继续访问电脑版

好程序员-千锋教育旗下高端IT职业教育品牌

400-811-9990
我的账户
好程序员

专注高端IT职业培训

亲爱的猿猿,欢迎!

已有账号,请

如尚未注册?

[JavaEE] 好程序员Java培训分享Spring框架之IOC的基本配置

[复制链接]
好程序员Java培训分享Spring框架之IOC的基本配置前言,上一章我们学习了SpringIOC特性以及IOC的实现原理:注解和反射,本章我们将学习如何在Spring中使用IOC
SpringIOC配置
Spring最重要的特性是IOC控制反转,利于IOC我们能降低对象之间的耦合性。
IOC需要通过一定的配置实现,配置方法分为:
1)使用xml文件配置
2)使用注解配置
使用Spring的基本功能,必须先导入Spring的依赖:
1. <dependency>
2.     <groupId>org.springframework</groupId>
3.     <artifactId>spring-context</artifactId>
4.     <version>5.1.5.RELEASE</version>
5. </dependency>
Spring Context:向 Spring框架提供上下文信息。Spring 上下文包括企业服务,例如JNDIEJB、电子邮件、国际化、校验和调度功能。它包含Spring Core组件,能实现IOC的核心功能。
使用xml文件配置
6. /**
7.  * CPU接口
8.  */
9. public interface Cpu {
10.     void run();
11. }
12. /**
13.  * AMDCPU
14.  */
15. public class AMDCpu implements Cpu {
16.     public void run() {
17.         System.out.println("AMDCPU正在运行....");
18.     }
19. }
20. /**
21.  * 内存接口
22.  */
23. public interface Memory {
24.     void read();
25.     void write();
26. }
27. /**
28.  * DDR8G的内存
29.  */
30. public class DDR8GMemory implements Memory {
31.     public void read() {
32.         System.out.println("使用DDR8G的内存读取数据....");
33.     }
34.     public void write() {
35.         System.out.println("使用DDR8G的内存写入数据....");
36.     }
37. }
38. 类似的IntelCpuDDR16Memory类省略了代码
39. /**
40.  * 电脑类
41.  */
42. public class Computer {
43.
44.     private Cpu cpu;
45.     private Memory memory;
46.         private String brand;
47.     ...省略get\set
48. public Computer() {
        }

        public Computer(String brand, Cpu cpu, Memory memory) {
                this.brand = brand;
            this.cpu = cpu;
            this.memory = memory;
        }

        public void start(){
            System.out.println(brand+"电脑启动了");
            cpu.run();
            memory.read();
            memory.write();
        }
49. }
maven项目的resources目录下,添加配置文件:
applicationContext.xml
50. <?xml version="1.0" encoding="UTF-8"?>
51. <beans xmlns="http://www.springframework.org/schema/beans"
52.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
53.        xmlns:context="http://www.springframework.org/schema/context"
54.        xsi:schemaLocation="http://www.springframework.org/schema/beans
58.      <!-- CPU对象-->
59.     <bean id="cpu" class="com.qianfeng.springioc.demo3.IntelCpu"/>
60.     <!--Memory对象-->
61.     <bean id="memory"         class="com.qianfeng.springioc.demo3.DDR16GMemory"/>
62.     <!--电脑对象-->
63.     <bean id="computer" class="com.qianfeng.springioc.demo3.Computer">
64.         <!--属性的注入-->
65.         <property name="cpu" ref="cpu"></property>
66.         <property name="memory" ref="memory"></property>
67.         <property name="brand" value="小米电脑"></property>
68.     </bean>
69. </beans>
配置说明:
<beans>是根标签,代表SpringJava对象容器
<bean>标签代表在容器中创建一个Java对象,属性id代表对象名,class是对象的类型。
在配置文件中首先创建了一个cpu对象和一个memory对象,然后创建了一个computer对象,computer中有Cpu类型的cpu属性和Memory类型memory属性以及String类型的brand属性,这里使用依赖注入的方式给属性赋值。
<property name="cpu" ref="cpu"></property>
property 指的是对象的属性,name是属性名,ref是对象引用,这里引用了前面的cpu对象。
<property name="brand" value="华硕电脑"></property>
brand属性注入的是数值而不是对象引用,这里使用value注入值。
Spring上下文对象
Spring容器可以看做是一个JavaBean的工厂BeanFactoryBeanFactory负责创建并保存各个JavaBeanBeanFactory的子类有:
1ClassPathXMLApplicationContext
基于XML配置文件上下文
2AnnotationConfigApplicationContext
基于注解配置的上下文
3FileSystemApplicationContext
基于文件系统的上下文
使用ClassPathXMLApplicationContext的方法:
70. public class TestComputer {
71.
72.     @Test
73.     public void testComputer(){
74.         //创建XML文件的应用程序上下文对象
75.         ClassPathXmlApplicationContext cxt =
76.               new ClassPathXmlApplicationContext("applicationContext.xml");
77.         //通过类型从容器获得Java对象
78.         Computer computer = cxt.getBean(Computer.class);
79.         //还可以通过对象名获得对象
80. //        Computer computer = (Computer) cxt.getBean("computer");
81.         computer.start();
82.     }
83. }
图片1.png
使用注解配置
SpringIOC也可以不使用配置文件,完全通过Java代码和注解实现配置,这种配置方法代码更加简洁。
常用注解:
@Component       
配置到类上面,Spring容器会自动扫描并添加有该注解类的对象
@Autowired       
配置到属性或set方法上,容器会将容器中同类型的对象自动注入到属性中
@Qualifier               
用于给不同的组件设置标识,用于区分多个相同类型的对象
@Value                       
注入一般类型的值,如:@Value(20) @Value("张三")
@Configuration       
加在配置类上,该类作为Spring启动的入口
@ComponentScan       
@Configuration配合使用,加在配置类上,用于扫描包中所有@Component注解的类
84. DDR8Memory类和IntelCpu类上添加@Component注解
85. 修改Computer类:
86. @Component
87. public class Computer {
88.
89.     @Value("苹果电脑")
90.     private String brand;
91.
92.     @Autowired
93.     private Cpu cpu;
94.
95.     @Autowired
96.     private Memory memory;
97.    ....
98. }
99.
100. @Configuration
101. @ComponentScan("com.qianfeng.springioc.demo4")
102. public class MyConfig {
103.
104.     public static void main(String[] args) {
105.         //创建基于注解的上下文对象
106.         AnnotationConfigApplicationContext cxt = new AnnotationConfigApplicationContext(MyConfig.class);
107.         //获得Computer对象
108.         Computer computer = cxt.getBean(Computer.class);
109.         computer.start();
110.     }
111. }
图片2.png
总结
本章我们学习了两种Spring的配置方法,XML配置的好处是:和代码耦合性低,容易维护,注解配置的好处是:代码简洁。两种配置方法的优势互补,在实际开发过程中一般会使用XML和注解混合进行配置。

好程序员Java培训官网:http://www.goodprogrammer.org

精彩内容,一键分享给更多人!
回复

使用道具 举报

您需要登录后才可以回帖

本版积分规则

关注我们
好程序员
千锋好程序员

北京校区(总部):北京市海淀区宝盛北里西区28号中关村智诚科创大厦

深圳西部硅谷校区:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619

杭州龙驰智慧谷校区:浙江省杭州市下沙经济技术开发区元成路199号龙驰智慧谷B座7层

郑州校区:郑州市二七区航海中路60号海为科技园C区10层、12层

Copyright 2007-2019 北京千锋互联科技有限公司 .All Right

京ICP备12003911号-5 京公安网11010802011455号

请您保持通讯畅通1对1咨询马上开启