Spring ioc详解,IOC控制反转对象bean
来源:互联网 发布:凯立德gps导航软件 编辑:程序博客网 时间:2024/05/18 23:53
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 UserDaouserDao;
public UserDao getUserDao() {
returnuserDao;
}
public void setUserDao(UserDao userDao) {
this.userDao =userDao;
}
@Override
public void getUser() {
// 关键是:什么时候给对象!此时该对象管理就交给我们的spring容器来管理!
userDao.getUser();
}
}
Beans.xml
<!-- Ioc:控制反转,之前创建对象是由程序本身创建,现在对象是由spring容器来创建了。程序被动接受创建对象! -->
<!-- value :是给的具体指!ref:指的是给对象的引用! -->
<beanid="oracle"class="com.bjsxt.dao.impl.UserOracleDaoImpl"></bean>
<beanid="mysql"class="com.bjsxt.dao.impl.UserMysqlDaoImpl"></bean>
<!-- ref="oarcle" 相当于 userDao = new UserOracleDaoImpl();-->
<beanid="userServiceImpl"class="com.bjsxt.service.impl.UserServiceImpl">
<propertyname="userDao"ref="mysql"></property>
</bean>
测试:
ApplicationContext ac =new ClassPathXmlApplicationContext("beans.xml");
UserServiceImpl userServiceImpl =ac.getBean("userServiceImpl", UserServiceImpl.class);
userServiceImpl.getUser();
注意:
<beanid="userServiceImpl"class="com.bjsxt.service.impl.UserServiceImpl">
<!-- userDao 具体指的是谁?UserServiceImpl类中的属性?是setter方法名,去了set字母。
由此得出结论:spring依赖注意可以通过setter注入。
-->
<propertyname="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.2.1 Type:通过数据类型注入:但是,在实际开发过程中不推荐使用。
public class Student {
private int id;
private String name;
}
<beanid="student" class="com.bjsxt.pojo.Student">
<constructor-argtype="int" value="12"/>
<constructor-argtype="String" value="高总"/>
</bean>
测试:
Student student = ac.getBean("student", Student.class);
System.out.println(student);
1.2.2 Index:通过下标来创建。
<!-- 有参构造 -->
<bean id="student" class="com.bjsxt.pojo.Student">
<!-- index 代表第几个属性,小标从0开始 -->
<constructor-argindex="0"value="12"/>
<constructor-argindex="1" value="张惠妹"/>
</bean>
1.2.3 Name:spring2.x版本应该不支持name创建实体类
<beanid="student" class="com.bjsxt.pojo.Student">
<!-- name:指的就是属性名 -->
<constructor-argname="id" value="111"/>
<constructor-argname="name" value="赵本山"/>
</bean>
1.2.4 静态工厂
public class StudentStaticFactory {
public static Student getStudent(intid,String name){
return new Student(id, name);
}
}
<!-- 静态工厂 factory-method:指的是工厂中创建实体类的方法-->
<bean id="student" class="com.bjsxt.pojo.StudentStaticFactory"factory-method="getStudent">
<constructor-argindex="0"value="1"/>
<constructor-argindex="1"value="董卿"/>
</bean>
1.2.5 动态工厂
public class StudentDynamicFactory {
public Student getStudent(intid,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-argindex="0"value="2"/>
<constructor-argindex="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详解,IOC控制反转对象bean
- spring IOC 控制反转详解
- Spring IOC 反转控制
- Spring-----> IOC(控制反转)
- Spring - 控制反转IOC
- Spring IoC[控制反转]
- Spring控制反转IOC
- Spring IOC控制反转
- Spring IOC 控制反转
- spring ioc 控制反转
- IOC反转控制详解
- Ioc--控制反转详解
- Ioc--控制反转详解
- Ioc--控制反转详解
- Spring详解篇之IoC控制反转
- Spring教程--IOC(控制反转)详解
- spring核心之IOC控制反转详解
- Spring详解(二)------IOC控制反转
- YII2 rules验证规则
- 推荐几个好用的maven仓库镜像站
- 备忘:Eclipse安装完成后的常用设置
- Eclipse智能提示及快捷键
- 常见的的设计模式-结构型模式(7种)
- Spring ioc详解,IOC控制反转对象bean
- HTML配色工具!在线配色工具
- ROS rviz 显示 kinect v2 点云数据
- Ubuntu命令笔记
- hadoop环境搭建
- Android总结篇系列:Android Service
- postman下载包及安装方法
- 编译器(GNU & GCC & clang & llvm)
- Android LinkedList的部分源码解析