jar包官网jar下载地址:
/
1.IOC控制反转(Inversion of Control): 控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。就是把对象的创建、初始化、销毁等工作交给spring容器来做,由spring容器来控制对象的生命周期。这主要是一个概念,是一种思想。
2.DI依赖注入(Dependency Injection): 是指程序运行过程中,若需要调用另一个对象协助时,无需在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。依赖注入是目前最优秀的解耦方式。依赖注入让Spring的Bean之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起
**3.IOC与DI的关系:**IOC是一个概念,是一种思想,其实现方式多种多样,当前比较流行的实现方式之一是DI
? 1.创建一个普通的Java工程,创建好Bean类User类和创建Junit测试类(Eclipse需要配置相应Spring插件)
public class User {public User(){System.out.println("调用了无参构造方法");}public void fly(){System.out.println("阁下何不同风起,扶摇直上九万里");}
}
? 2.导入jar包(context,core,expression,beans和依赖jar包commons.logging)
? 3.创建Spring的XML配置文件l(声明User Bean:将自己信息告诉Spring容器,例如id和class,Spring容器根据class,通过反射对象)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:xsi=""xsi:schemaLocation="://www.springframework/schema/beans/spring-beans.xsd"><!-- 注册User对象 --><bean class="com.sxt.pojo.User" id="userId" name="userName" /></beans>
? 4.初始化Spring容器l中配置的所有类对象都会被创建,而且该方法会调用User类的无参构造,如果没有无参构造方法,会抛出NoSuchMethodExceptiop异常
@org.junit.Testpublic void test2(){//初始化容器ApplicationContext ac = new ClassPathXmlApplicationContext(l");}
运行结果:初始化容器会调用Bean User类的无参构造方法
? 5.可以通过容器中的getBean方法获取Spring容器中创建好的对象:id和name
@org.junit.Testpublic void test2(){ApplicationContext ac = new ClassPathXmlApplicationContext(l");//调用了无参构造方法//根据id获取对象User user1 = (Bean("userId");//根据name获取对象User user2 = (User) ac.getBean("userName");user1.fly();//阁下何不同风起,扶摇直上九万里user2.fly();//阁下何不同风起,扶摇直上九万里}
运行结果:根据id和name都能获取到User对象
? 6.除了id和name之外,getBean还有其他重载方法可以获取Spring容器中的对象
@org.junit.Testpublic void test3(){ApplicationContext ac = new ClassPathXmlApplicationContext(l");//根据User类的class类,如果l文件中有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=“userID1,userID2,userID3”: 表示bean有一个名字,这个名字就是userID1,userID2,userID3
name=“user1,user2,user3”: 表示bean有多个名字,多个名字分别是user1、user2以及user3
<!-- l --><!-- 注册User对象 --><bean class="com.sxt.pojo.User" id="userID1,userID2,userID3" name="user1,user2,user3" />
? 8.BeanFactory和ApplicationContext的区别:
/*** 4.ApplicationContext方式加载*/public void test4(){//创建容器的同时,容器初始化,容器所有的bean创建完毕ApplicationContext ac = new ClassPathXmlApplicationContext(l");//去Spring容器中获取一个User对象User user = ac.getBean(User.class);user.fly();}/*** 5.BeanFactory方式加载,下面已过时*/public void test5(){//创建容器对象,BeanFactory当调用getBean获取响应对象时才创建对象BeanFactory bf = new XmlBeanFactory(new ClassPathResource(l"));//去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.配置l文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:xsi=""xsi:schemaLocation="://www.springframework/schema/beans/spring-beans.xsd"><!-- 注册User对象 --><bean class="com.sxt.factory.UserFactory" factory-method="getInstance" id="user2" /></beans>
? 3.Junit测试类测试
@org.junit.Testpublic void test6(){//创建容器的同时,容器初始化,容器所有的bean创建完毕ApplicationContext ac = new ClassPathXmlApplicationContext(l");//去Spring容器中获取一个User对象User user = ac.getBean(User.class);user.fly();}
? 1.创建动态工厂类
/*** User 动态工厂类*/
public class UserFactory {public User getInstance(){return new User();}
}
? 2.配置l文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:xsi=""xsi:schemaLocation="://www.springframework/schema/beans/spring-beans.xsd"><!-- 注册User对象 --><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(l");//去Spring容器中获取一个User对象User user = ac.getBean(User.class);user.fly();}
本文发布于:2024-02-03 07:34:04,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170691684249566.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |