前言
这是一篇主要说spring framework部分的。Spring框架绝对必要的所有技术:控制反转(IoC)容器,面向切面编程(AOP)技术。官网上讲Ioc也是DI( IoC is also known as dependency injection (DI))。
一,概念
Spring是一个生态,里面是一个全家桶有很多产品。其中spring framework是最基本的框架。
spring framework:spring是一个一站式的轻量级框架。(IOC控制反转(DI依赖注入))
控制反转(IOC):将创建对象的权利交给spring,spring创建对象后放到容器中,给需要的类中注入进去。iOC
依赖注入(DI):给对象的属性设置值。
bean:Spring IoC容器管理一个或多个bean。这些bean是使用你提供给容器的配置元数据创建的(例如,以XML 定义的形式 )。Bean是由Spring IoC容器实例化,组装和以其他方式管理的对象。
二,IOC(控制反转)Inversion of Control
原理高级示图:
控制反转:将创建对象的权利交给spring,spring创建对象后放到容器中,给需要的类中注入进去。
创建对像的方式:
1,构造方法创建对象
<!--创建user对象-->
<bean id="user" class="com.stu.ioc_a1.User" scope="singleton"></bean>
2,静态工厂
方法式静态的。
<!-- 静态工厂获取user对象 factory-method是获取哪一个方法 -->
<bean id="user01" class="com.stu.ioc_a1.UserStaticFactory" factory-method="getUser"></bean>
3,实例工厂
<!--实例工厂获取user对象 创建工厂对象,2获取user对象-->
<bean id="factory" class="com.stu.ioc_a1.UserFactory" ></bean>
<bean id="user02" factory-bean="factory" factory-method="getUser"></bean>
获取对象:
//读取xml文件,
ApplicationContext cont = new ClassPathXmlApplicationContext("ApplicationContext.xml");
// FileSystemXmlApplicationContext
//加载绝对路经下的文件
//获取对象
User user = (User) cont.getBean("user");
User user2 = cont.getBean("user",User.class);
三,DI(依赖注入)dependency injection
给对象的属性设置值。
注入的方式:
- set方式注入
前提:注入的对象必须要有set方法。spring通过调用set方法来给属性赋值。
<bean id="(类名)" class="(包名+类名)">
<!--设置值 property设置属性ref设置对象的属性值-->
<property name="(对象属性)" value="(值)"/>
</bean>
- 构造方式注入
前提:要有有参构造方法。
<bean id="(类名)" class="(包名+类名)">
<!--通过反射调用有参构造ref设置引用对象类型-->
<constructor-arg name="(对象属性)" value="(值)"></constructor-arg>
</bean>
3,p名称空间和c名称空间注入值
p名称空间是对set的简写,c名称空间是对构造注入的简写。
<!--p名称空间-->
<bean id="(类名)" class="(包名+类名)" p:(对象属性)="(值)"..>
</bean>
<!--c名称空间注入-->
<bean id="(类名)" class="(包名+类名)" c:(对象属性)="(值)"..>
</bean>
并要添加xml里beans标签属性:
xmlns:p="http://www.springframework.org/schema/p"<!--p-->
xmlns:c="http://www.springframework.org/schema/c"<!--c-->
4,复杂数据注入
四,注解方式的Ioc和DI
1,开启注解扫描,让我们加注解可以被spring扫描到。
在xml文件中添加包扫描。
<!-- 包扫描器,会spring会扫描包下所有的类,这些类上有指定的注解
如果有指定的注解,
spring就会创建对象,并存储再ioc中
-->
<context:component-scan base-package="包路径"/>
2,添加注解
在相应的类或属性上添加注解。
3,注解
loc中有:
@Component,@Repository,@Service ,@Controller
如果你理解了Ioc是什么就会理解这4个注解使用来干什么的。他们是用注解的方式,让spring扫描到该类,添加到spring容器中,创建bean。
下面的DI也是如此。
DI中有:
自动注入:@Autowired给类属性注入,到spring容器类里找子类;@Qualifier(“子类”):指定子类
@Value("#{类名}"):可以注入对象属性,@Value(“值”):给基本类型属性注入值。
@Resource(name=“类名”):属于jdk的注解
结
这篇有一些是我自己的理解。如有理解错误,欢迎指出,我们共同进步。