Spring框架基础学习(二)

创建一个spring项目

上一篇文章中介绍了IOC控制反转及DI依赖注入的思想,在之前的项目开发中new一个对象是我们自己做的,如果使用Spring框架的话,创建对象这份工作由我们自己执行反转给spring帮我们执行.Spring是一个容器,他将帮我们管理对象

这里使用Myeclipse创建一个简单的spring项目.
步骤1:新建一个web项目
步骤2:右击src-->Myeclipse-->add Spring Capabilities

image.png

步骤3:选择要引入的jar包,next-->finsh
image.png

这样就完成了,向web项目中引入spring所需jar包,并创建了applicationContext.xml配置文件
也可自行去spring官网下载jar包,进行导入
https://repo.spring.io/release/org/springframework/spring/

将自定义对象由自己创建移交给spring创建

1.首先先创建两个类User和Pet,使用javabean创建原则


public class User {
    private int uid;
    private String username;
    private String password;
    
    //加入宠物字段
    private Pet upet;
    
    
    public User(String username, Pet upet) {
        System.out.println("String, pet");
        this.username = username;
        this.upet = upet;
    }
    public User(Integer username, Pet upet) {
        System.out.println("方法二:int, pet");
        this.username = username.toString();
        this.upet = upet;
    }
    public User(Pet upet,Integer username) {
        System.out.println("方法三:int, pet");
        this.username = username.toString();
        this.upet = upet;
    }
    public Pet getUpet() {
        return upet;
    }
    public void setUpet(Pet upet) {
        this.upet = upet;
    }
    public User(){
        System.out.println("User 对象空参构造");
    }
    public int getUid() {
        return uid;
    }
    public void setUid(int uid) {
        this.uid = uid;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
    
    @Override
    public String toString() {
        return "User [uid=" + uid + ", username=" + username + ", password="
                + password + ", upet=" + upet + "]";
    }
    public void userInit(){
        System.out.println("user init");
    }
    
    public void userDestory(){
        System.out.println("user destory");
    }
    

}

Pet类

package bean;

public class Pet {
    private String petType;
    private String color;
    public String getPetType() {
        return petType;
    }
    public void setPetType(String petType) {
        this.petType = petType;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    @Override
    public String toString() {
        return "Pet [petType=" + petType + ", color=" + color + "]";
    }
    

}

2.在applicationContext.xml中配置bean








    



3.使用一个测试类进行测试

package test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import bean.User;

public class HelloSpring {
    //在之前项目开发中new对象使我们自己做的
    @Test
    public void Test1(){
        User u = new User();
        u.setUid(1);
        System.out.println(u);
    }
    //IOC的反转:创建对象这份工作由我们自己执行反转给spring帮我们执行;
    //IOC的控制:就是由Spring帮我们负责创建销毁对象,掌控对象的生命周期等,我们在需要使用对象的是有跟Spring申请即可;
    //IOC是一种编程思想,也是一种新的设计模式.他需要DI(依赖注入)的支持
    //Spring是一个容器,他将帮我们管理对象
    @Test
    public void Test2(){
        //根据spring配置文件获取容器对象
        //ApplicationContext配置的所有bean都会子啊容器创建的时候被创建出来
        //如果配置的bean较多,那么创建容器的时候,会产生内存过大的问题,这种情况在机械性能比较落后的时候比较明显
        //延迟加载lazy-init为true就是创建容器时不加载配置的bean对象,在获取的时候才创建;
        //scope="singleton"默认值是 单例的只创建一个对象  "prototype"多力例,在获取的时候创建新的对象,但在特殊情况下需要使用多例的
        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        //User u=(User)ac.getBean("user");//法一
        //通过getBean获取配置好的user对象(程序员向spring容器要对象)
        User u=ac.getBean(User.class);//法二 通过User字节码对象获得
        System.out.println(u);
    }
     @Test
     public void Test3(){
        
        //scope="singleton"默认值是 单例的只创建一个对象  "prototype"多力例,在获取的时候创建新的对象,但在特殊情况下需要使用多例的
         ClassPathXmlApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        
        User u1=ac.getBean(User.class);//法二 通过User字节码对象获得
        User u2=ac.getBean(User.class);
        User u3=ac.getBean(User.class);
        System.out.println(u1==u2);
        //关闭容器对象,就会触发bean的destorymethod(单例时才能销毁)
        ac.close();
     }
}

通过使用Junit Test 测试Test2方法可得到以下执行结果


image.png

可见spring帮我们创建了对象,并注入了初始值

属性注入

属性注入分为三种形式
1.set注入
这要求要实现注入的类,设置set()方法
applicationContext.xml配置如下


    
    
    
    
    




    
    


进行属性配置,ref可实现引用

2.构造方法注入
要求被注入属性的类,实现有参构造方法






    
    
    

3.复杂属性注入
这里是指对数组,list,set,map,properties类型的属性注入
新建一个包含上述类型的类

package bean;

import java.util.*;

public class MyCollection {

    //数组
    private Object[] array;
    //list
    private List list;
    //set
    private Set set;
    //map
    private Map map;
    //properties
    private Properties prop;
    public Object[] getArray() {
        return array;
    }
    public void setArray(Object[] array) {
        this.array = array;
    }
    public List getList() {
        return list;
    }
    public void setList(List list) {
        this.list = list;
    }
    public Set getSet() {
        return set;
    }
    public void setSet(Set set) {
        this.set = set;
    }
    public Map getMap() {
        return map;
    }
    public void setMap(Map map) {
        this.map = map;
    }
    public Properties getProp() {
        return prop;
    }
    public void setProp(Properties prop) {
        this.prop = prop;
    }
    @Override
    public String toString() {
        return "MyCollection [array=" + Arrays.toString(array) + ", list="
                + list + ", set=" + set + ", map=" + map + ", prop=" + prop
                + "]";
    }
}

applicationContext.xml配置属性


    
    
        
            123
            abc
            
        
    
    
    
      
        
            456
            vcvc
            
        
    
    
    
       
        
            798
            aaa
            
        
    
    
    
    
        
        
        
        

        
    
    
    
    
        
        小花
        23
        
    

你可能感兴趣的:(Spring框架基础学习(二))