解析Spring第一天

目的:了解spring框架中的注解

前言:同样是使用idea创建一个普通的maven工程(如何创建一个普通的Maven工程可以参考mybatis入门第一天的详解)。

项目结构:

 

 

代码编辑:

在项目中引入需要的Maven开发坐标

 1 <dependencies>
 2         <dependency>
 3             <groupId>org.springframework</groupId>
 4             <artifactId>spring-context</artifactId>
 5             <version>5.0.2.RELEASE</version>
 6         </dependency>
 7         <dependency>
 8             <groupId>commons-logging</groupId>
 9             <artifactId>commons-logging</artifactId>
10             <version>1.2</version>
11         </dependency>
12         <dependency>
13             <groupId>log4j</groupId>
14             <artifactId>log4j</artifactId>
15             <version>1.2.12</version>
16         </dependency>
17         <dependency>
18             <groupId>junit</groupId>
19             <artifactId>junit</artifactId>
20             <version>4.12</version>
21             <scope>test</scope>
22         </dependency>
23     </dependencies>
  • 在demo文件下 编写接口UserService
1 package zh.test.deomo;
2 
3 public interface UserService {
4     public  void  sayHi();
5 }
  • 实现接口,编写UserServiceImpl
1 package zh.test.deomo;
2 
3 public class UserServiceImpl implements UserService {
4 
5     public void sayHi() {
6         System.out.println("SayHi");
7     }
8 }
  • 载demo1文件下,编写关于spring使用setter的方式注入

  创建一个DeptDao的接口

1 package zh.test.deomo1;
2 
3 public interface DeptDao {
4     public void save();
5 }

  实现该接口,DeptDaoImpl

1 package zh.test.deomo1;
2 
3 public class DeptDaoImpl implements DeptDao {
4     public void save() {
5         System.out.println("持久层。。保存。。。");
6     }
7 }

  编写DeptService的接口

1 package zh.test.deomo1;
2 
3 public interface DeptService {
4     public  void save();
5 }

实现接口DeptServiceImpl

 1 package zh.test.deomo1;
 2 
 3 public class DeptServiceImpl implements DeptService {
 4     private DeptDao deptDao;
 5 
 6     //普通的数据类型,也需要提供set的方法注入
 7     private String name;
 8     private int age;
 9 
10     public void setName(String name) {
11         this.name = name;
12     }
13 
14     public void setAge(int age) {
15         this.age = age;
16     }
17 
18     //依赖注入通过set的方法传递进来
19     public void setDeptDao(DeptDao deptDao) {
20         System.out.println("set被调用。。。");
21         this.deptDao = deptDao;
22     }
23 
24     public void save() {
25         System.out.println("业务层。。。保存");
26         System.out.println(name+":"+age);
27         deptDao.save();
28     }
29 }
  • 在deomo2的文件下编写关于使用构造函数的方式注入Car.java文件
 1 package zh.test.deomo2;
 2 
 3 public class Car {
 4     private String name;
 5     private Double money;
 6 
 7     public String getName() {
 8         return name;
 9     }
10 
11     public void setName(String name) {
12         this.name = name;
13     }
14 
15     public Double getMoney() {
16         return money;
17     }
18 
19     public void setMoney(Double money) {
20         this.money = money;
21     }
22 
23     @Override
24     public String toString() {
25         return "Car{" +
26                 "name='" + name + '\'' +
27                 ", money=" + money +
28                 '}';
29     }
30 
31     public Car(String name, Double money) {
32         this.name = name;
33         this.money = money;
34     }
35 }
  • 在deomo4文件下编写扩展的类,主要是存放集合、数组、属性文件
 1 package zh.test.deomo4;
 2 
 3 
 4 import java.util.Arrays;
 5 import java.util.List;
 6 import java.util.Map;
 7 import java.util.Properties;
 8 
 9 public class Extension {
10     //数组
11     private String [] strs;
12 
13     //集合
14     private List<String> list;
15 
16     //map
17     private Map<String,String> map;
18 
19     //属性文件
20     private Properties properties;
21 
22     @Override
23     public String toString() {
24         return "Extension{" +
25                 "strs=" + Arrays.toString(strs) +
26                 ", list=" + list +
27                 ", map=" + map +
28                 ", properties=" + properties +
29                 '}';
30     }
31 
32     public String[] getStrs() {
33         return strs;
34     }
35 
36     public void setStrs(String[] strs) {
37         this.strs = strs;
38     }
39 
40     public List<String> getList() {
41         return list;
42     }
43 
44     public void setList(List<String> list) {
45         this.list = list;
46     }
47 
48     public Map<String, String> getMap() {
49         return map;
50     }
51 
52     public void setMap(Map<String, String> map) {
53         this.map = map;
54     }
55 
56     public Properties getProperties() {
57         return properties;
58     }
59 
60     public void setProperties(Properties properties) {
61         this.properties = properties;
62     }
63 }
  • 编写applicationContxt.xml文件在resources目录下
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
 4        xsi:schemaLocation="http://www.springframework.org/schema/beans
 5                     http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
 6 
 7     <!--IOC管理bean-->
 8     <!--配置实现类,配置组建bean管理-->
 9     <!--
10     标签bean  用来管理类,把类交给IOC容器管理,IOC容器把当前的这个类创建对象,存入到IOC容器中。
11     id="唯一的值,自定义"
12     class="管理类的全路径,包名+类名    底层使用反射代码创建对象"
13     class.forName("zh.test.deomo.UserServiceImpl")
14 
15 
16     scope="是创建之后的对象是单例的还是多例的"  默认是单例的
17     scope="singleton" 单例的
18     scope="prototype"  多例的
19     区别:如果是多例的在程序加载配置文件的时候不会立即创建一个对象,而是什么时候用到什么时候会用到。
20          如果是单例的则是在程序已加载的时候就会创建一个对象。只要IOC的容器存在那么单例的对象就一直存在。
21     -->
22     <bean id="userService" class="zh.test.deomo.UserServiceImpl" />
23 
24     <!--通过set的方法注入-->
25     <bean id="deptService" class="zh.test.deomo1.DeptServiceImpl">
26         <!--依赖注入 name="service中的属性"-->
27         <property name="deptDao" ref="deptDao"/>
28         <!--给普通的属性注入值-->
29         <property name="name" value="白天黑天阴天"/>
30         <property name="age" value="20"/>
31     </bean>
32     <bean id="deptDao" class="zh.test.deomo1.DeptDaoImpl"></bean>
33 
34     <!--属性的构造方法-->
35     <bean id="car" class="zh.test.deomo2.Car">
36         <constructor-arg name="name" value="劳斯劳斯"/>
37         <constructor-arg name="money" value="11111"/>
38     </bean>
39 
40     <!--扩展方法-->
41     <bean id="extension" class="zh.test.deomo4.Extension">
42         <!--数组-->
43         <property name="strs">
44             <array>
45                 <value>l</value>
46                 <value>g</value>
47             </array>
48         </property>
49         
50         <!--集合-->
51         <property name="list">
52             <list>
53                 <value>james</value>
54                 <value>davis</value>
55             </list>
56         </property>
57 
58         <!--map-->
59         <property name="map">
60             <map>
61                 <entry key="lakers" value="lebron"/>
62                 <entry key="lakers1" value="davis"/>
63             </map>
64         </property>
65 
66         <!--属性文件-->
67         <property name="properties">
68             <props>
69                 <prop key="lakers">london</prop>
70                 <prop key="lakers1">kuzma</prop>
71             </props>
72         </property>
73     </bean>
74 </beans>
  • 最后写一个测试的方法,对以上的注入进行测试
 1 package zh.test;
 2 
 3 import org.junit.Test;
 4 import org.springframework.context.ApplicationContext;
 5 import org.springframework.context.support.ClassPathXmlApplicationContext;
 6 import zh.test.deomo.UserService;
 7 import zh.test.deomo.UserServiceImpl;
 8 import zh.test.deomo1.DeptService;
 9 import zh.test.deomo2.Car;
10 import zh.test.deomo4.Extension;
11 
12 public class testDemo {
13     @Test
14     public  void test()
15     {
16         //原始写法:
17         UserServiceImpl userService = new UserServiceImpl();
18         userService.sayHi();
19         //使用Spring框架
20 
21     }
22 
23     @Test
24     public void testSpring(){
25         //创建SpringIOC的工厂(容器) ,需要加载配置文件,就会将配置文件中的类通过反射的方式创建成对象
26         //将对象存入到容器中,以key : value 的方式,k="userService"  v="UserServiceImpl对象(默认是单例的)"
27         //
28         ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
29         //从容器中获取对象  面向接口的编程
30         UserService userService = (UserService) ac.getBean("userService");
31         //调用对象
32         userService.sayHi();
33     }
34 
35 //    setter的方式注入
36     @Test
37     public void testSpringDI(){
38         //创建SpringIOC的工厂(容器) ,需要加载配置文件,就会将配置文件中的类通过反射的方式创建成对象
39         //将对象存入到容器中,以key : value 的方式,k="userService"  v="UserServiceImpl对象(默认是单例的)"
40         //
41         ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
42         //从容器中获取对象  面向接口的编程
43         DeptService deptService = (DeptService) ac.getBean("deptService");
44         //调用对象
45         deptService.save();
46     }
47 
48 //    属性的构造方法注入
49     @Test
50     public void testCar(){
51         ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
52         //从容器中获取对象  面向接口的编程
53         Car car = (Car) ac.getBean("car");
54         //调用对象
55         System.out.println(car);
56     }
57 
58     //扩展方法  数组、集合、map、属性文件
59     @Test
60     public void testExtension(){
61         ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
62         //从容器中获取对象  面向接口的编程
63         Extension extension = (Extension) ac.getBean("extension");
64         //调用对象
65         System.out.println(extension);
66     }
67 
68 }

分享之路,欢迎交流。。。

posted @ 2019-09-14 12:57  白天黑天阴天  阅读(186)  评论(0编辑  收藏  举报