博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
配置javaBean
阅读量:7003 次
发布时间:2019-06-27

本文共 6782 字,大约阅读时间需要 22 分钟。

bean基本配置:

上述代码相当于java代码

  ExampleBean exampleBean=new ExampleBean();

id属性是bean的一种标识,通常被用来bean的引用

class是必须的属性,表示bean的源

 

为bean起别名 alias标签

增强可读性,在不同模块中使用

public  void studentTest(){        XmlBeanFactory factory=new XmlBeanFactory(                new ClassPathResource("com/test/applicationContext.xml"));        Student s=(Student) factory.getBean("admin");        System.out.println(s.getUsername()+"\t"+s.getPassword()+"\t"+s.getSchool().getSchoolName()+"\t"+s.getLikeTeacher().getTeacherName());        factory.destroySingletons();    }

 

延迟加载lazy-init属性

默认启动spring容器自动初始化所有的bean,可以设置延迟加载

lazy-init=true开启懒加载,默认为false

京大附中
View Code

 

工厂模式factory-method

cat.java:

Cat.java

CatFactory.java:

View Code

Test:

public class CatFactory {    static Cat cat=new Cat("小辉",12); public Cat getCat(){ return cat; } }

 

如果一个Bean不能被new直接实例化,而是通过工厂类的某个方法创建的,需要把bean的class属性配置称为工厂类(或者把factory-bean属性配置称为工厂对象),factory-method属性配置为产生实例的方法。

使用这种方式的话factory中的getCat方法必须是static,否则报错

使用这种方式的话factory中的getCat方法不能是static修饰的,否则报错

 

构造函数<constructor-arg>

初始化Beans的时候,spring容器会自动初始化,bean的自动初始化一般是调用空的构造方法。如果构造方法是有参数的,怎么选择呢?

系统根据你的bean下面的参数的情况下自动选定构造方法,根据参数的类型,数量等等。对应的参数为先后顺序,与构造方法顺序相同。使用<constructor-arg>配置

index:指定参数的位置

value:指定参数的内容

ref:将参数的内容引用其他bean对象 ref有三个属性: bean 引用其他bean,没有限制 local只能引用本配置文件的bean  parent只能引用副配置文件中的bean

 

单态模式singleton(单例模式)

单态模式也称为单例模式,就是程序中只能存在一个实例。Spring默认为单态模式,如果想更改称为非单态模式(称为Prototype模式),需要把singleton属性设置称为false:

默认情况下使用spring创建对象是单例模式,这种方式创建独享非常容易出现安全性问题。使用bean标签的scope属性解决该问题。

    * singleton:默认的方式,单例,属性共享(一般情况下应当将数据放到方法的变量中)

    * prototype:多例,当一个bean是多例模式的情况下,lazy-init为false或者default无效,也就是说懒加载强制开启。

 

配置属性

前面只是指定的构造方法的赋值,在bean中往往需要我们给它注入一些属性。

 

使用<property>标签为一般属性赋值,普通类型:String、int、double

destory-method属性配置关闭方法,在丢弃java对象时会调用一次这个方法。

init-method初始化方法也可以加入

 注意:为属性赋值null要使用<null>标签,使用value子标签

如果

赋值的是"",而不是null

 

赋值对象属性

在<property>中使用ref属性:

Spring配置文件中的Bean可以相互引用,引用时使用<ref>标签配合Bean的id属性。

<ref>可以应用在<construct-arg>构造函数参数中,也可以用在bean的property属性中

除了使用ref引用其他的bean,还可以使用内部配置,类似于java中的内部类。

 

配置List、Set、Map、Properties属性

踢球
游泳
1
游戏角色:
狂战士
HP:
3000
学校:
江西生物科技职业学院
1580909730@qq.com

如果是普通属性如String、Integer、Double、Boolean等,直接使用字符串即可

对象类型使用ref引用

有顺序的会按照先后顺序排序

使用代码示例:

public void TestLazy(){        ApplicationContext contxt=new ClassPathXmlApplicationContext("com/test/applicationContext.xml");        Student s=(Student) contxt.getBean("admin");        System.out.println(s.getHobby().get(0)+s.getHobby().get(1));        Iterator it=s.getSp().iterator();        while(it.hasNext()){            System.out.println(it.next());        }        Map
mp=s.getMp(); Set
ks=mp.keySet(); Iterator ii=ks.iterator(); while(ii.hasNext()){ String key=(String) ii.next(); System.out.println(key+"\t"+mp.get(key)); } Properties pro=s.getPro(); Enumeration p =pro.keys(); while(p.hasMoreElements()){ String s3=(String) p.nextElement(); System.out.println(s3+": "+pro.getProperty(s3)); } }
View Code

 

<idref>与<ref>的区别

<idref>与<ref>的作用都是配置java对象。<idref>的用法和<ref>基本相同,不同的是<idref>只有bean和local属性,没有parent属性。

Spring检查XML配置文件时,会检查<idref>配置的Bean存在不存在。而<ref>只有在第一次调用才会检查。

 

bena的destory-method设置销毁方法

....

bean的初始化方法init-method

 

depends-on依赖对象

Spring会按照配置文件里Bean配置的先后顺序实例化Bean。但有时候在实例化A之前需要先实例化后面的B对象。这时可以使用depends-on,强制先B对象。例如:

这时会在实例化A对象的时候先检查B是否存在,如不存在则先实例化B对象。

 

属性自动装配autowire

如果每个属性都使用<ref>设置,一个大项目的Spring配置文件会十分庞大,为此Spring提供了自动装配机制,不用配置<ref>而根据某种规则自动配置属性

通过bean的autowire属性配置

autowire的取值范围

autowire属性定义的莪不是需要自动装配的属性名,而是自动装配的原则。一旦装配,所有的属性都将遵循autowire定义的规则。

如果显式定义了<property>或者<constructor-arg>,会覆盖默认装配。(覆盖装配指的是优先级的。autowire<constructor-arg<property)

自动装配一般与依赖检查连用。

喵咪
3
江西生物科技职业学院
青山湖大道
View Code
package com.test;import org.junit.Test;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.core.io.ClassPathResource;import com.Model.Dog;import com.Model.Home;public class TestHome {    @Test    public void TestAutoWire(){        XmlBeanFactory factory=new XmlBeanFactory(new ClassPathResource("com/test/applicationContext.xml"));        Home home=(Home) factory.getBean("家");        System.out.println(home.getCat().getName()+"\t"+home.getAddress()+"\t"+home.getSchoolList().get(0).toString()+"\t"+home.getSchoolList().get(1).toString());        Dog dog=home.getDog();        Dog dog1=home.getDog1();        String message=(dog==dog1)?"是同一只狗":"不是同一只狗";        System.out.println("dog和dog1"+message);    }}
View Code

 

 

依赖检查dependency(这个属性在spring3的时候被取消了)

有些时候某些Bean的属性配置有错误,比如某个属性没有设置。这种错误在程序启动的时候不会有任何异常表现,会一直潜伏到Spring调用该Bean才被发现。为了防止这种情况,Spring提供依赖检查,在程序启动的时候检车依赖配置。如果有错误,启动的时候就会抛出异常,以便发现配置错误。

通过<bean>的dependency-check设置依赖检查规则,例如:

dependency的属性取值范围

 

转载地址:http://hqevl.baihongyu.com/

你可能感兴趣的文章
前站 - 前端导航,搜索社区,阅读文章,提升技术
查看>>
【树结构2】树打印
查看>>
Traps of Computed in Vue
查看>>
推荐一款可以多平台上使用的控制台工具
查看>>
搞不清边缘计算几款产品差异?动动小手点这里!
查看>>
Java基础【三】 - 常用类库:java.lang.Enum
查看>>
jsonp跨域实现百度首页联想功能
查看>>
推荐一个php7+ mongodb三方类
查看>>
JDK8安装与环境变量配置
查看>>
Grafana文档(配置)
查看>>
前端异步那些年
查看>>
mac 下使用PHPSTROM连接docker的xdebug
查看>>
JS 里的类型
查看>>
监听浏览器的后退事件
查看>>
opencv python 基于KNN的手写体识别
查看>>
能在编码时做的事,就不要推迟到运行时
查看>>
【Chrome】对ios-safari移动端的H5页面进行调试(ios-webkit-debug-proxy)
查看>>
JavaScript之变量提升
查看>>
简单实现 ES6 Promise
查看>>
配置mail使用SMTP发送邮件
查看>>