spring简介和Ioc控制反转
1、spring简介
>理念:本身是大杂烩整合现有技术
>优点:轻量级()框架;Ioc容器-控制反转;Aop面向切面编程;支持事务;支持框架……
创建对象由容器实现,不再由应用程序实现;减小耦合性,(service与dao)层与层分离,并不直接依赖;如果dao层的实现发生改变,应用程序并不需改变。
2、Ioc编程思想
控制反转(依赖注入-需要有set方法):控制对象的创建,权限交由spring,程序变为被动接收对象。
3、Ioc的实现是通过Ioc容器来实现的,Ioc容器-BeanFactory
<?xml version="1.0" encoding="UTF-8"?>
<!-- 最基本的命名空间定义和空间装载 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="mysqlDao" class="dao.impl.UserDaoMySqlImpl"/>
<bean id="oracleDao" class="dao.impl.UserDaoOracleImpl"/>
<bean id="service" class="service.impl.UserServiceImpl"/>
<!--ref引用对象(对象由spring创建)-->
<property name="userDao" ref="mysqlDao"></property>
</bean>
</beans>
4、使用Ioc创建对象的3种方式
*通过无参构造方法来创建
<bean id="user" class="pojo.User">
<property name="name" value="张三"></property>
</bean>
*通过有参构造创建
<bean id="user" class="pojo.User"/>
<!--根据参数下标设置的-->
<constructor-arg index="0" value="李四" />
<!--根据参数名设置-->
<constructor-arg name="name" value="李四" />
<!--根据参数类型设置-->
<constructor-arg type="java.lang.String" value="李四" />
</bean>
*通过工厂方法来创建对象
(静态工厂)创建工厂类:
public class UserFactory {
public static User newInstance(String name) {
return new User(name) ;
}
}
配置:
<bean id="user" class="factory.UserFactory" factory-method="newInstance">
<constructor-arg index="0" value="李四" />
</bean>
(动态工厂)
public class UserFactory {
public User newInstance(String name) {
return new User(name) ;
}
}
<bean id="userFactory" class="factory.UserFactory" />
<bean id="user" class="uerFactory" factory-method="newInstance">
<constructor-arg index="0" value="李四" />
</bean>
5、配置文件
<beans>
<!--id是bean的标识符,要唯一,如果没有配置id,则name默认为标识符;
如果不设置id和name,那么可以根据applicationContext.getBean(class)获取对象
-->
<!--alias给指定bean设置别名(多个)-->
<alias name="user" alias="user1" />
<!--团队协作通过import来实现-->
<import resource="entity.xml" />
</beans>
6、依赖注入DI:指bean对象创建依赖于容器,依赖的资源由容器来设置和装配。
spring注入:
构造器注入:
【重要】setter注入:要求被注入的属性必须有set方法。set方法的方法名由set+属性首字母大写。如果属性是boolean没有get方法是is方法。
<bean id="user" class="pojo.User">
<!--常量注入-->
<property name="name" value="张三"></property>
<!--Bean注入-->
<property name="userDao" ref="mysqlDao"></property>
<!--数组注入-->
<property name="books">
<array>
<value>A</value>
<value>B</value>
</array>
</property>
<!--List集合注入--><!--和set格式差不多-->
<property name="hobbies">
<list>
<value>A</value>
<value>B</value>
</list>
</property>
<!--Map集合注入-->
<property name="cards">
<map>
<entry key="银行" value="1111111" />
<entry>
<key>银行</key>
<value>111111</value>
</entry>
</map>
</property>
<!--空注入-->
<property name="wife"><null /></property>
<!--propertise注入-->
<property name="info">
<props>
<prop key="学号">1111</prop>
<prop key="姓名">张三</prop>
</props>
</property>
</bean>
<!--要先在beans元素(头文件)中添加属性:xmlns:p="http://www.springframework.org/schema/p"-->
<!--p命名空间注入-->
<bean id="user" class="pojo.User" p:name="风清扬" p:age="18" />
<!--c命名空间注入,增加头文件:xmlns:c="http://www.springframework.org/schema/c"-->
<!--c命名空间注入,与其他注入不同点在于其需要有对应参数的构造方法(而不是set方法)-->
<bean id="user" class="pojo.User" c:name="风清扬" c:age="18" />
7、bean的作用域(bean属性:scope="")
singleton单例(默认作用域):整个容器中只有一个对象实例
prototype原型:每次获取bean都产生一个新的对象
request:每次请求时创建一个新的对象
session:在会话范围内时是一个对象
global session:只在portlet下有用,表示的是application
application:表示在一个应用范围内是一个对象
8、bean的自动装配
设置bean的autowire属性:默认autowire="no"
>autowire="byName"根据名称装配,名称是在service类中定义的设置Dao层对象的set方法名称(去掉set)
public void setUserDao(UserDao userDao) {
this.userDao = userDao ;
}
>autowire="byType"根据类型自动装配,不用管bean的id,但是同一种类型的bean只能有一个,否则会报错
public void setUserDao(UserDao userDao) {
this.userDao = userDao ;
}
>autowire="constructor"当通过构造器注入实例化bean时,使用byType的方式装配构造方法
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao ;
}
可以配置全局的自动装配类型,在bean.xml文件的头部添加default-autowire="byName"
- Spring中的IoC(控制反转)具体是什么东西
- Spring学习3—控制反转(IOC)Spring依赖注入(DI)和控制反转(IOC)
- Spring反转控制(IOC)和依赖注入(DI)
- 【转】跟我一起学Spring 3(4)–深入理解IoC(控制反转)和DI(依赖注入)
- Spring的IoC(控制反转) 、DI(依赖注入)
- Spring(1)初识Spring+IOC(控制反转)+DI(依赖注入)(附:快速入门案例)
- 理解Java Spring核心功能之一:控制反转容器(IOC Container)
- (转)关于spring的两个概念:IoC(控制反转) ,DI(依赖注入)
- 谈谈对Spring IOC(控制反转)的理解--转
- Helloworld之Spring依赖注入/控制反转(DI/IoC)版
- Spring控制反转IOC和依赖注入DI实例
- Spring控制反转(IoC)的理解
- [转]Java Spring的Ioc控制反转Java反射原理
- Spring 使用注解的方式实现IOC和DI(控制反转和依赖注入)
- spring IOC容器:控制反转
- Spring基础(一):IOC(控制反转)
- 如何理解Spring的控制反转IOC和依赖注入DI思想
- Spring的控制反转(IOC)和依赖注入(DI)具体解释
- Spring的IOC(控制反转)和DI(依赖注入)
- Spring学习3—控制反转(IOC)基于Annotation(注解)的依赖注入实现