Spring ioc详解,IOC控制反转对象bean
2017-09-07 14:45
344 查看
Spring ioc详解
IOC:控制反转-对象<bean>
1 程序对象由原来本身程序自己创建,变为spring容器来创建。现在程序只能被动接受。什么时候创建的bean对象。当读取核心配置文件的时候,就创建了该对象!对象的生命周期完全由spring掌控!2 使程序员只关注业务处理,而不需要关注对象的创建!
3 Ioc能够实现程序的解耦!降低程序的耦合度!
public interface UserDao { void getUser(); } public class UserMysqlDaoImpl implements UserDao { @Override public void getUser() { System.out.println("Mysql 数据库获取的数据!"); } } public class UserOracleDaoImpl implements UserDao { @Override public void getUser() { System.out.println("oarcle 数据库获取的数据!"); } } public interface UserService { void getUser(); } public class UserServiceImpl implements UserService{ // 关键 private UserDao userDao; public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public void getUser() { // 关键是:什么时候给对象!此时该对象管理就交给我们的spring容器来管理! < d1c5 span style="color:#0000C0;">userDao.getUser(); } } Beans.xml <!-- Ioc:控制反转,之前创建对象是由程序本身创建,现在对象是由spring容器来创建了。程序被动接受创建对象! --> <!-- value :是给的具体指!ref:指的是给对象的引用! --> <bean id="oracle" class="com.bjsxt.dao.impl.UserOracleDaoImpl"></bean> <bean id="mysql" class="com.bjsxt.dao.impl.UserMysqlDaoImpl"></bean> <!-- ref="oarcle" 相当于 userDao = new UserOracleDaoImpl();--> <bean id="userServiceImpl" class="com.bjsxt.service.impl.UserServiceImpl" > <property name="userDao" ref="mysql"></property> </bean> 测试: ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml"); UserServiceImpl userServiceImpl = ac.getBean("userServiceImpl", UserServiceImpl.class); userServiceImpl.getUser(); 注意: <bean id="userServiceImpl" class="com.bjsxt.service.impl.UserServiceImpl" > <!-- userDao 具体指的是谁?UserServiceImpl类中的属性?是setter方法名,去了set字母。 由此得出结论:spring 依赖注意可以通过setter注入。 --> <property name="userDao1" ref="mysql"></property> </bean> |
Bean的生成方式
1.1 无参构造生成public class Hello { public Hello() { } @Override public String toString() { return "我是无参构造!"; } } Beans.xml <bean id="hello" class="com.bjsxt.pojo.Hello"></bean> 测试类: ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml"); Hello hello = ac.getBean("hello", Hello.class); System.out.println(hello); |
1.2.1 Type:通过数据类型注入:但是,在实际开发过程中不推荐使用。
public class Student { private int id; private String name; } <bean id="student" class="com.bjsxt.pojo.Student"> <constructor-arg type="int" value="12"/> <constructor-arg type="String" value="高总"/> </bean> 测试: Student student = ac.getBean("student", Student.class); System.out.println(student); |
<!-- 有参构造 --> <bean id="student" class="com.bjsxt.pojo.Student"> <!-- index 代表第几个属性,小标从0开始 --> <constructor-arg index="0" value="12"/> <constructor-arg index="1" value="张惠妹"/> </bean> |
<bean id="student" class="com.bjsxt.pojo.Student"> <!-- name:指的就是属性名 --> <constructor-arg name="id" value="111"/> <constructor-arg name="name" value="赵本山"/> </bean> |
public class StudentStaticFactory { public static Student getStudent(int id,String name){ return new Student(id, name); } } <!-- 静态工厂 factory-method:指的是工厂中创建实体类的方法--> <bean id="student" class="com.bjsxt.pojo.StudentStaticFactory" factory-method="getStudent"> <constructor-arg index="0" value="1"/> <constructor-arg index="1" value="董卿"/> </bean> |
public class StudentDynamicFactory { public Student getStudent(int id,String name){ return new Student(id, name); } } <bean id="dynamic" class="com.bjsxt.pojo.StudentDynamicFactory"/> <!-- 动态工厂:factory-bean:指的是动态工厂的bean:id --> <bean id="student" class="com.bjsxt.pojo.Student" factory-bean="dynamic"> <constructor-arg index="0" value="2"/> <constructor-arg index="1" value="黄渤"/> </bean> |
Scope属性
1 Singleton 单例:<bean>标签默认的就是单例2 prototype原型:多例模式,每次创建的时候,则会实例化一个 新的对象
3 request 每次请求时创建一个新的对象
4 session 在会话的范围内时一个对象
5 global session 只在portlet下有用,表示是application
6 application 在应用范围中一个对象
User user = ac.getBean("user",User.class); System.out.println(user); User user1 = ac.getBean("user",User.class); System.out.println(user1); System.out.println("8888888888888888888888"); System.out.println(user==user1); |
相关文章推荐
- Spring详解篇之IoC控制反转
- Spring源码阅读——简单模拟Spring的控制反转IOC和依赖注入(Bean的加载和获取)
- <三>Ioc控制反转——bean.xml注入对象、值和集合(附源码)
- spring核心之IOC控制反转详解
- Spring详解(二)------IOC控制反转
- Spring IOC -bean对象的生命周期详解
- Spring详解(二)------IOC控制反转
- Spring详解(二)------IOC控制反转
- Spring学习(1):控制反转(IoC)和依赖注入(DI)的详解以及注解(annotation)开发入门案例
- Spring的控制反转(IOC)和依赖注入(DI)详解
- Spring详解(二)------IOC控制反转
- 【Spring】Spring控制反转IOC创建bean失败-java.io.FileNotFoundException
- 码农小汪-spring框架学习之2-spring IoC and Beans 控制反转 依赖注入 ApplicationContext BeanFactory
- 码农小汪-spring框架学习之2-spring IoC and Beans 控制反转 依赖注入 ApplicationContext BeanFactory
- Spring IOC -bean对象的生命周期详解
- Spring IOC -bean对象的生命周期详解
- Spring学习笔记(一) 通过Spring控制反转(IOC:Inversion of Control)为对象设置属性
- 【框架】[Spring3]下载安装、开源框架与IoC控制反转详解
- Spring-IOC(控制反转详解及demo)
- spring、IoC控制反转和DI依赖注入入门、基于XML的Bean装配、基于注解的Bean装配