Spring
Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。
1.控制反转IOC(Inversion of controller):是把程序中的类与类之间的依赖关系交给容器处理,一般有两种方式。一种是依赖查找DL(dependency lookup):程序提供查找方式,交给容器处理。另一种是依赖注入DT(dependency injection):程序不提供查找放手,提供合适的构造方法或者setter方法,让容器进行注入来解决依赖的关系。Spring的控制反转就是通过注入来实现的。
什么是依赖:一个类实现某种功能,需要依靠领一个类实现。
依赖注入:是指一个对象需要另一个对象时,无需在代码中创建,而是依赖于外部容器,由外部容器创建后传递给程序。依赖注入是目前为止最好的解耦方式,因为依赖关系是依赖配置文件的方式组织在一起,而不是而不在程序中硬编码。
1.描述依赖关系有两种:
a.通过构造方法的方式注入
<?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.xsd">
<!--相当于我们java代码的 UserService userService = new UserService() -->
<!-- 通过构造方法的方式注入 -->
<bean id= "userService"
class = "com.fz.systemmanage.service.UserServiceForSpring">
<!-- <constructor-arg ref="userDao"></constructor-arg> -->
<constructor-arg ref="userDaoOther"></constructor-arg>
</bean>
<!-- <bean id= "userService"
class = "com.tz.spring.sysmanage.service.UserServiceForSpring">
<property name="userDao" ref="userDaoOther"></property>
</bean> -->
<!--相当于java代码的 UserDao userDao = new UserDao() -->
<bean id = "userDao"
class = "com.fz.systemmanage.dao.impl.UserDao"></bean>
<!--相当于我们java代码的 UserDaoOther userDaoOther = new UserDaoOther() -->
<bean id= "userDaoOther"
class= "com.fz.systemmanage.dao.impl.UserDaoOther"></bean>
</beans>
b:通过setter方法注入
<!-- 通过setter方法注入 -->
<bean id= "userService" class = "com.fz.systemmanage.service.UserServiceForInterface">
<property name="userDao" ref="userDaoOther"></property>
</bean>
<bean id = "userDao"
class = "com.fz.systemmanage.dao.impl.UserDao"></bean>
<bean id= "userDaoOther"
class= "com.fz.systemmanage.dao.impl.UserDaoOther"></bean>
注解的注入:就是通过注解标签的方式来替换xml配置文件里面的注册和依赖关系的描述。
注解的实现步骤:
a.加入jar包:spring-aop-4.3.2.RELEASE.jar
b.加入context约束
c.在配置文件applicationContext.xml配置定义扫描需要用到的直接 的包路径
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"
>
<context:component-scan base-package="com.fz.annotation"></context:component-scan>
</beans>
d.在需要注解的bean对象前面加入注解标识符
@Component 相当于配置文件中<bean id=" " class=""></bean>
定义component注解的三种方式
a.@Repository:这个注解主要声明在dao的类组件
b.@Service:这个注解主要是在Service类中声明
c.@Controller:这个注解主要是声明在控制类中(Springmvc/struts2/action/controller)
e.用注解表示autowire声明依赖关系
@Resource java的注解,它是默认以buName方法注入,byName找不到的话,再用byType去匹配
@Autowired Spring的注解,默认的是以byType注入,如果有多个实现类,它再用byName的方法去匹配
@autowired @Qualifier spring的注解,两个一起用,指定用byName去匹配。