首页 >> 大全

二、XML配置方式

2023-12-10 大全 26 作者:考证青年

01-XML配置方式

jar包官网

jar包官网jar下载地址:
https://repo.spring.io/libs-release-local/org/springframework/spring/

一、IOC概念

1.IOC控制反转( of ): 控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。就是把对象的创建、初始化、销毁等工作交给容器来做,由容器来控制对象的生命周期。这主要是一个概念,是一种思想。

2.DI依赖注入( ): 是指程序运行过程中,若需要调用另一个对象协助时,无需在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。依赖注入是目前最优秀的解耦方式。依赖注入让的Bean之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起

**3.IOC与DI的关系:**IOC是一个概念,是一种思想,其实现方式多种多样,当前比较流行的实现方式之一是DI

二、XML配置方式 (一)普通构造注入

? 1.创建一个普通的Java工程,创建好Bean类User类和创建Junit测试类(需要配置相应插件)

public class User {public User(){System.out.println("调用了无参构造方法");}public void fly(){System.out.println("阁下何不同风起,扶摇直上九万里");}
}

? 2.导入jar包(,core,,beans和依赖jar包.)

? 3.创建的XML配置文件.xml(声明User Bean:将自己信息告诉容器,例如id和class,容器根据class,通过反射对象)


<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean class="com.sxt.pojo.User" id="userId" name="userName" />beans>

? 4.初始化容器:.xml中配置的所有类对象都会被创建,而且该方法会调用User类的无参构造,如果没有无参构造方法,会抛出p异常

	@org.junit.Testpublic void test2(){//初始化容器ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");}

运行结果:初始化容器会调用Bean User类的无参构造方法

? 5.可以通过容器中的方法获取容器中创建好的对象:id和name

@org.junit.Testpublic void test2(){ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//调用了无参构造方法//根据id获取对象User user1 = (User)ac.getBean("userId");//根据name获取对象User user2 = (User) ac.getBean("userName");user1.fly();//阁下何不同风起,扶摇直上九万里user2.fly();//阁下何不同风起,扶摇直上九万里}

运行结果:根据id和name都能获取到User对象

? 6.除了id和name之外,还有其他重载方法可以获取容器中的对象

@org.junit.Testpublic void test3(){ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//根据User类的class类,如果applicationContext.xml文件中有2个User类的声明用该方法会报错User user = ac.getBean(User.class);user.fly();//根据class类和id或name属性获取对象User user2 = ac.getBean("userId", User.class);user2.fly();}

运行结果:

? 7.id和name的区别:在同一配置文件中ID不要出现重复的

id=“,,”: 表示bean有一个名字,这个名字就是,,

name=“user1,user2,user3”: 表示bean有多个名字,多个名字分别是user1、user2以及user3

<bean class="com.sxt.pojo.User" id="userID1,userID2,userID3" name="user1,user2,user3" />

? 8.和的区别:

配置方式有哪些__配置方式是什么意思

	/*** 	4.ApplicationContext方式加载*/public void test4(){//创建容器的同时,容器初始化,容器所有的bean创建完毕ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//去Spring容器中获取一个User对象User user = ac.getBean(User.class);user.fly();}/*** 	5.BeanFactory方式加载,下面已过时*/public void test5(){//创建容器对象,BeanFactory当调用getBean获取响应对象时才创建对象BeanFactory bf = new XmlBeanFactory(new ClassPathResource("application.xml"));//去Spring容器中获取一个User对象User user = bf.getBean(User.class);user.fly();}

(二)静态工厂注入

? 1.创建静态工厂类

/*** 	User 静态工厂类*/
public class UserFactory {/*** 	必须是static静态方法* @return*/public static User getInstance(){return new User();}
}

? 2.配置.xml文件


<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean class="com.sxt.factory.UserFactory" factory-method="getInstance" id="user2" />beans>

? 3.Junit测试类测试

@org.junit.Testpublic void test6(){//创建容器的同时,容器初始化,容器所有的bean创建完毕ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//去Spring容器中获取一个User对象User user = ac.getBean(User.class);user.fly();}

(三)动态工厂注入

? 1.创建动态工厂类

/*** 	User 动态工厂类*/
public class UserFactory {public User getInstance(){return new User();}
}

? 2.配置.xml文件


<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean class="com.sxt.factory.UserFactory" id="userFactory1" /><bean id="user" factory-bean="userFactory1" factory-method="getInstance"/>beans>

? 3.Junit测试类测试

@org.junit.Testpublic void test6(){//创建容器的同时,容器初始化,容器所有的bean创建完毕ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//去Spring容器中获取一个User对象User user = ac.getBean(User.class);user.fly();}

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了