二、XML配置方式

01-XML配置方式
jar包官网
jar包官网jar下载地址:https://repo.spring.io/libs-release-local/org/springframework/spring/
一、IOC概念
1.IOC控制反转( of ): 控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器 。就是把对象的创建、初始化、销毁等工作交给容器来做,由容器来控制对象的生命周期 。这主要是一个概念,是一种思想 。
【二、XML配置方式】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,通过反射对象)

? 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

? 8.和的区别:

二、XML配置方式

文章插图
/***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文件

? 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文件

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