• spring IOC注解与xml配置


    转载自:https://blog.csdn.net/u014292162/article/details/52277756

    IOC

       1小案例

        将对象的依赖交给配置文件来配置(配置文件的名字是可以任意的,不过一般写一个比较规范的名字),这里使用IOC特性对类中的属性进行初始化

       使用junit来进行测试单元测试(注意:单元测试一些老的版本可能会存在bug,如calssNotFound...,建议下载新的junit版本)

       User.java 用户bean类

     1 package com.xxx.spring.ioc.bean;
     2  
     3 import java.io.Serializable;
     4  
     5 public class User implements Serializable {
     6     private static final long serialVersionUID = 1L;
     7     private int id; //用户编号
     8     private String name; //用户名
     9     private int age; //用户年龄
    10     private String gender; //用户性别
    11     public User() {}
    12     public User(int id, String name, int age, String gender) {
    13         super();
    14         this.id = id;
    15         this.name = name;
    16         this.age = age;
    17         this.gender = gender;
    18     }
    19     public int getId() {
    20         return id;
    21     }
    22     public void setId(int id) {
    23         this.id = id;
    24     }
    25     public String getName() {
    26         return name;
    27     }
    28     public void setName(String name) {
    29         this.name = name;
    30     }
    31     public int getAge() {
    32         return age;
    33     }
    34     public void setAge(int age) {
    35         this.age = age;
    36     }
    37     public String getGender() {
    38         return gender;
    39     }
    40     public void setGender(String gender) {
    41         this.gender = gender;
    42     }
    43     @Override
    44     public String toString() {
    45         return "User [id=" + id + ", name=" + name + ", age=" + age
    46                 + ", gender=" + gender + "]";
    47     }
    48     
    49 }

     spring中bean的配置:

      这里说的Spring中的Bean概念,跟我们写JavaBean类不是一个概念,Spring中所有配置在xml中或使用spring来初始化的都叫Bean(dao,service,javaBean,Controller...)

      IOC控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是有外部容器的创建和维护

      什么被反转了呢——————》获的对象的过程被反转了,依赖注入

    set.xml配置文件初始化User.java中的相关属性,可以使用junit对其进行单元测试

     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"
     4 xsi:schemaLocation="http://www.springframework.org/schema/beans
     5 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
     6 <!-- name中的user可以取别名    scope="prototype" 或singleton="false"可以设置为非单例模式 -->
     7     <bean name="user,user2" class="com.xxx.spring.ioc.bean.User">
     8         <property name="id" value="1"/>
     9         <property name="name" value="tom"/>
    10         <property name="age" value="20"/>
    11         <property name="gender" value="male"/>
    12     </bean>
    13         
    14 </beans>

    测试:

     1     @Test
     2     public void test2() {
     3         BeanFactory factory = new ClassPathXmlApplicationContext("com/xxx/spring/chap1/set.xml");
     4         //User user = (User) factory.getBean("user");
     5         //User user = (User) factory.getBean("user",User.class);
     6         //User user = (User) factory.getBean(User.class); //只有唯一的bean的时候才使用这种方式
     7         //System.out.println(user);
     8         System.out.println(factory.getType("user")); //获取user实例的类型
     9         User user = (User) factory.getBean("user"); 
    10         User user2 = (User) factory.getBean("user");
    11         System.out.println(user == user2);//true -- 单例  --这是可以控制的在配置文件中 bean scope="prototype"-->会变成原型模式 这时结果会是false
    12         System.out.println(factory.isPrototype("user"));//是否为原型     false
    13         System.out.println(factory.isSingleton("user"));//是否为单例     true
    14         
    15         System.out.println(factory.isTypeMatch("user", User.class));//判断 user实例是否为这种类型 true
    16         
    17         String[] str = factory.getAliases("user"); //获取别名  
    18         for(int i=0;i<str.length;i++){
    19             System.out.println(str[i]);//user2
    20         }
    21     }

    使用junit测试时候,注解@BeforeClass的会先于@Test注解的方法运行,junit相关的jar最好使用4.4以上的版本

    上边的案例factory.getBean("user",User.class);第一参数是set.xml文件中对应bean的name值或id值. 

    System.out.println(user == user2);//true 
  • 相关阅读:
    无限级分类表设计
    多表连接
    连接(上接子查询那一篇随笔)
    数据库中常用指令
    子查询
    mysql查询表达式解析
    mysql单表删除记录DELETE
    mysql 单表更新记录UPDATE
    七言
    时分秒计算案例
  • 原文地址:https://www.cnblogs.com/EmilZs/p/9251779.html
Copyright © 2020-2023  润新知