spring是一个一站式轻量级开源框架,Spring提供了JavaEE各层的解决方案,表现层:Spring MVC,持久层:JdbcTemplate、ORM框架整合,业务层:IoC、AOP、事务控制。Spring的出现取代了EJB的臃肿、低效、繁琐复杂、脱离现实。
核心技术::IoC(Inverse of Control 控制反转): 将对象创建权利交给Spring工厂进行管理。
将对象的创建权利反转给spring框架。使用IOC可以解决的程序耦合性高的问题
AOP(Aspect Oriented Programming 面向切面编程),基于动态代理功能增强。可以方便的实现对程序进行权限
拦截,运行监控等功能。
声明式事物的支持::只需要通过配置就可以完成对事物的管理,无需手动编程。
注入 DI:把实体的字节码文件交给spring管理,spring底层会自动用反射创建对象,然后调用set方法注入 注入 创建对象的一个过程.....
dependency injection 依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件中!!
如果UserServiceImpl的实现类中有一个属性,那么使用Spring框架的IOC功能时,可以通过依赖注入把该属性的值传入进来!
spring好处::方便解耦,简化开发,spring就是个大工厂,可以将所有对象创建和依赖关系维护,交给spring管理。 方便测试,spring对junit4支持,可通过注解方便测试spring程序。
<!-- 构造方法注入 -->
<bean id="departmentDaoFactory" class="cn.itcast.dao.impl.DepartmentDaoFactory" ></bean>
<bean id="departmentDao" factory-bean="departmentDaoFactory" factory-method="create1"></bean>
<bean id="car" class="cn.itcast.domain.Car">
<constructor-arg name="name" value="奥迪A6"></constructor-arg>
<constructor-arg name="price" value="57.3"></constructor-arg>
</bean>
<!-- set方法注入 -->
<bean id="userDao" class="cn.itcast.dao.impl.UserDaoImpl" init-method="init" destroy-method="destory"/>
<!-- <bean id="departmentDao" class="cn.itcast.dao.impl.DepartmentDaoFactory" factory-method="create"></bean> -->
<bean id="departmentDaoFactory" class="cn.itcast.dao.impl.DepartmentDaoFactory" ></bean>
<bean id="departmentDao" factory-bean="departmentDaoFactory" factory-method="create1"></bean>
<!-- 构造方法注入 -->
<bean id="car" class="cn.itcast.domain.Car">
<constructor-arg name="name" value="奥迪A6"></constructor-arg>
<constructor-arg name="price" value="57.3"></constructor-arg>
</bean>
<!-- set方法注入 -->
<bean id="student" class="cn.itcast.domain.Student">
<property name="id" value="11"></property>
<property name="name" value="张三"></property>
</bean>
注意:采用set方法注入时,类中一定要有无参构造方法,因为spring会先调用无参构造方法实例化对象。
<!-- set方法注入对象 -->
<bean id="people" class="cn.itcast.domain.People">
<property name="name" value="小明"></property>
<property name="car" ref="car"></property>
</bean>
Spring IOC注解
?添加注解@Component,相当于<bean id=”” class=””>,value属性给bean指定id,value属性的名字也可以不写,直接写一个值
<!-- 开启注解扫描 -->
<context:component-scan base-package="cn.itcast.service"></context:component-scan>
创建对象的注解::Component 把资源让spring来管理。相当于在xml中配置一个bean。
@Controller @Service @Repository
.注入数据的::value
相当于:<property name="" ref=""><property name="" value="">
@Autowired:::自动按照类型注入。当使用注解注入属性时,set方法可以省略。它只能注入其他bean类型。当有多个类型匹配时,使用要注入的对象变量名称作为bean的id,在spring容器查找,找到了也可以注入成功。找不到就报错。
@Qualifer作用:在自动按照类型注入的基础之上,再按照Bean的id注入。它在给字段注入时不能独立使用,必须和@Autowire一起使用;但是给方法参数注入时,可以独立使用。
属性:value:指定bean的id。
Resource 直接按照Bean的id注入。它也只能注入其他bean类型。把action交给Sping的IOC容器管理的时候,那个时候Scope取值必须是多例的,因为Action本身就是多例的.
改变作用域范围的::Scope prototype