栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于Spring中xml文件中的一些小细节

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于Spring中xml文件中的一些小细节

1、constructor-arg 1.1、type属性
	
        //constuctor-arg如果设置了type属性,会根据类型来找到相应的形参
        
            18
        
        
            gt
        
    
//Student类
public class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }
}
//Test类
public class Test {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
        Student stu = context.getBean("stu", Student.class);
        System.out.println(stu);//Student{name='gt', age=18}
    }
}

如果不设置type属性,则会报错,

说明如果type不设置默认为String类型

1.2、index属性

index代表注入的顺序,从下标0开始,形参若类型一样,可以控制index来注入顺序,若不一样,则必须要保证注入的数据类型和形参类型一样,否则会报错


        
            18
        
        
            1
        
        
            gt
        

public Student(String name, String age, int id) {
        this.name = name;
        this.age = age;
        this.id=id;
}
//Test类
public class Test {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
        Student stu = context.getBean("stu", Student.class);
        System.out.println(stu);//Student{name='gt', age='18', id=1}
    }
}
2、property 2.1、name、value属性

name:必须再Student类中包含字段为age的setter方法,否则会报错
value:值


        

2.2、name、ref属性

name:同上
ref:引用bean的id值


        


3、value标签

< value> : 可以通过value为主体注入简单数据类型。可以指定String与基本类型+基本类型的包装类型。容器在注入的时候会做适当的转换工作,这个是最底层元素,无法再嵌套别的元素了

4、ref标签

        
        	//bean属性的值会在容器里寻找名为test的bean对象
            
        
    

可以简化上述写法


        
    

5、list标签

一个bean对象的属性可以为List列表,既可以赋值,也可以注入依赖


        
            
                123
                
                etoak
            
        
    
    
        

测试

public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
        Student stu = context.getBean("stu", Student.class);
        System.out.println(stu.getList());//[123, str, etoak]
    }
}
6、map标签

Student类里创建一个map集合,这里给map集合注入依赖


        
            
                
                    1
                
                
                    2
                
                
                
                
                
            
        
    
    
        

测试

public class Test {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
        Student stu = context.getBean("stu", Student.class);
        System.out.println(stu.getMap());//{str1=1, str2=str2, str3=1, str4=1}
    }
}

我们在这会发现map标签里面必须有entry标签,而entry标签有五个属性
key:键
value:值
这两个属性我们可以了解就是给map集合添加键值对,
key-ref:根据属性的值再容器找bean对象,则键就是该bean对象的实例
value-ref:根据该属性的值在容器找bean对象,则值就是bean对象的实例
value-type:规定value的值的类型
此外,我们可以看到上面的有两个键值重复,进行覆盖,符合map集合的语法,后添加会覆盖之前的值。

//上述map和entry标签可以改为props和prop

        
            
                1
            
        

6、bean标签 6.1、scope属性

值为prototype,表示每次getBean得到对象的实例都会重新建一个


        
    

两个String对象地址不同

public class Test {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
        String stu = context.getBean("str", String.class);
        String stu1 = context.getBean("str", String.class);
        System.out.println(stu==stu1);//false
    }
}

值为prototype,表示每次getBean得到对象的实例都是同一个


        
    
public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
        String stu = context.getBean("str", String.class);
        String stu1 = context.getBean("str", String.class);
        System.out.println(stu==stu1);//true
    }
6.2、lazy-init属性

默认为fasle,不进行懒加载



public class Student {
    public Student(){
        System.out.println("Student无参构造方法");
    }
    ..
}
//Test类
public class Test {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
        Student stu = context.getBean("stu", Student.class);
    }
}

我们发现控制台打印两遍

而当他们都改为true时



public class Test {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
        //Student stu = context.getBean("stu", Student.class);
    }
}

此时控制台无任何打印,当把此注释取消掉会发现在控制台打印一行

当懒加载的bean对象,被getBean方法调用就会创建实例

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/845303.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号