最新公告
  • 欢迎您光临极客文库,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • Spring的属性注入

    对于类成员变量,注入有三种方式

    1、构造函数注入

    2、属性setter方法注入

    3、接口注入

    [v_warn]Spring支持前两种[/v_warn]

    构造方法注入

    通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean实例在实例化后就可以使用。

    构造器注入在元素里声明的属性

    实例演示

    新建一个demo4,创建一个User类。

    package com.jikewenku.ioc.demo4;
    
    public class User {
        private String name;
        private Integer age;
    
        public User(String name,Integer age){
            this.name = name;
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    

    接下来对它进行测试,先将这个类配置到Spring中去

    
      
       
    
    

    再新建一个测试类SpringDemo4,写一个测试方法

    @Test
    public void demo1(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = (User)applicationContext.getBean("user");
        System.out.println(user);
    }
    

    运行程序,可以看到值已经显示出来了。

    set方法注入

    使用set方法注入,在Spring配置文件中,通过设置注入的属性,开发中更习惯于这种方式。

    新建一个Person类

    package com.jikewenku.ioc.demo4;
    
    public class Person {
        private String name;
        private Integer age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    

    配置文件中进行配置

    
            
            
    
    

    SpringDemo4中编写测试类

    @Test
    public void demo2(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Person person = (Person)applicationContext.getBean("person");
        System.out.println(person);
    }
    

    运行程序,结果如下

    p名称空间

    使用p命名空间:为了简化XML文件配置,Spring从2.5开始引入一个新的p名称空间

    p:<属性名>=”xxx”引入常量值

    p:<属性名>-ref=”xxx”引用其他Bean对象

    编写配置文件

    
    

    剩下的操作和前面类似,就不详细介绍了。

    SpEL注入

    SpELl:spring expression language,spring表达式语言,对依赖注入进行简化

    语法:#{表达式}

    [v_notice]
    SpEL表达式语言

    语法:#{}

    #{‘hello’}:使用字符串

    #{topicId3}:使用另一个bean

    #{topicId4.content.toUpperCase()}:使用指定名属性,并使用方法

    #{T{java.lang.Math}.PI}:使用静态字段或方法[/v_notice]

    代码演示

    新建一个类Product

    package com.jikewenku.ioc.demo4;
    
    public class Product {
        private String name;
        private Double price;
    
        private Category category;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Double getPrice() {
            return price;
        }
    
        public void setPrice(Double price) {
            this.price = price;
        }
    
        public Category getCategory() {
            return category;
        }
    
        public void setCategory(Category category) {
            this.category = category;
        }
    
        @Override
        public String toString() {
            return "Product{" +
                    "name='" + name + '\'' +
                    ", price=" + price +
                    ", category=" + category +
                    '}';
        }
    }
    

    新建一个类Category

    package com.jikewenku.ioc.demo4;
    
    public class Category {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "Category{" +
                    "name='" + name + '\'' +
                    '}';
        }
    }
    

    在配置文件中编写

    
        
            
        
    
    
            
        
    

    SpringDemo4中编写测试类

    @Test
    public void demo3(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Product product = (Product)applicationContext.getBean("product");
        System.out.println(product);
    }
    

    运行程序,观察结果

    假设此时想调用另外一个Bean的方法,这时候应该怎么写呢?

    新建一个类ProductInfo

    package com.jikewenku.ioc.demo4;
    
    public class ProductInfo {
    
        public Double calculatePrice(){
            return Math.random() * 199;
        }
    }
    

    编写配置文件

    
    
    
            
            
            
        
    

    再运行一下刚才的测试类Demo3

    复杂类型的属性注入

    数组类型的属性注入

    List集合类型的属性注入

    Set集合类型的属性注入

    Map集合类型的属性注入

    Propertis类型的属性注入

    代码演示

    新建一个包demo5,新建一个CollectionBean

    package com.jikewenku.ioc.demo5;
    
    import java.util.*;
    
    public class CollectionBean {
        private String[] arrs; // 数组类型
    
        private List list;// List集合类型
    
        private Set set; // Set集合类型
    
        private Map map;// Map集合类型
    
        private Properties properties; // 属性类型
    
        public String[] getArrs() {
            return arrs;
        }
    
        public void setArrs(String[] arrs) {
            this.arrs = arrs;
        }
    
        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 getProperties() {
            return properties;
        }
    
        public void setProperties(Properties properties) {
            this.properties = properties;
        }
    
        @Override
        public String toString() {
            return "CollectionBean{" +
                    "arrs=" + Arrays.toString(arrs) +
                    ", list=" + list +
                    ", set=" + set +
                    ", map=" + map +
                    ", properties=" + properties +
                    '}';
        }
    }
    

    编写配置文件

    
    
        
        
            
                aaa
                bbb
                ccc
            
        
        
        
            
                111
                222
                333
            
        
        
        
            
                ddd
                eee
                fff
            
        
        
        
            
                
                
                
            
        
        
        
            
                root
                1234
            
        
    
    

    新建一个测试类SpringDemo5

    @Test
    public void demo1(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    
       CollectionBean collectionBean = (CollectionBean)applicationContext.getBean("collectionBean");
    
       System.out.println(collectionBean);
    }
    

    运行程序

    本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
    极客文库 » Spring Bean管理(XML方式)之属性注入方式及构造方法的属性注入

    常见问题FAQ

    如果资源链接失效了怎么办?
    本站用户分享的所有资源都有自动备份机制,如果资源链接失效,请联系本站客服QQ:2580505920更新资源地址。
    如果用户分享的资源与描述不符怎么办?
    可以联系客服QQ:2580505920,如果要求合理可以安排退款或者退赞助积分。
    如何分享个人资源获取赞助积分或其他奖励?
    本站用户可以分享自己的资源,但是必须保证资源没有侵权行为。点击个人中心,根据操作填写并上传即可。资源所获收益完全归属上传者,每周可申请提现一次。
    如果您发现了本资源有侵权行为怎么办?
    及时联系客服QQ:2580505920,核实予以删除。

    Leave a Reply

    Hi, 如果你对这款资源有疑问,可以跟我联系哦!

    联系发布者

    Leave a Reply

    Hi, 如果你对这款资源有疑问,可以跟我联系哦!

    联系发布者
    • 102会员总数(位)
    • 3674资源总数(个)
    • 2本周发布(个)
    • 0 今日发布(个)
    • 136稳定运行(天)

    欢迎加入「极客文库」,成为原创作者从这里开始!

    立即加入 了解更多
    成为赞助用户享有更多特权立即升级