Spring的IOC和DI

Spring的IOC和DI

1.Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架
2.Spring官方:http://spring.io
3.Spring的核心概念
(1)容器
Spring作为一个容器,可以管理对象的生命周期和对象与对象之间的依赖关系.通过配置文件,来定义对象以及配置对象与对象的依赖关系
(2)控制反转IOC(Inversion of Control)
控制反转就是对对象的控制权转移,创建对象不由调用者完成,而是通过Spring容器完成,由Spring容器控制对象的生命周期,并且对象的创建,初始化,以及对象的销毁都是通过Spring容器完成;
(3)面向切面编程AOP(Aspect Oriented Programming)
是一种编程思想,是面向对象编程OOP的补充。很多框架都实现了对AOP编程思想的实现。Spring也提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如日志和事务管理)进行开发。应用对象只实现它们应该做的–完成业务逻辑–仅此而已。它们并不负责其它的系统级关注点,例如日志或事务支持
4.依赖注入DI(Dependency Injection)
IOC是一个概念,是一种思想,DI是IOC实现方式之一
依赖注入是该对象进行赋值的,不需要通过java代码进行赋值,而是通过Spring的配置文件中Bean结合起来来实现赋值
5.ClassPathXmlApplicationContext和FileSystemXmlApplicationContext的区别???
ClassPathXmlApplicationContext和FileSystemXmlApplicationContext都是加载Spring配置文件的
ClassPathXmlApplicationContext是加载当前类路径下Spring配置文件
FileSystemXmlApplicationContext是加载本地文件系统下的Spring配置文件
6.ApplicationContext与BeanFactory容器的区别??
ApplicationContext容器在初始化时,就将所有的对象都创建好了
BeanFactory容器在初始化时,并乜有创建对象,而是调用getBean()时,才创建对象
7.SpringIOC创建对象的方式(3种)
(1)默认的方式:调用的是无参构造器
(2)调用的有参构造器
<bean id=” ” calss=” ”>
<constructor-arg name/index/type ref/value >

value: 使用场景是在基本的数据类型或String
ref: 使用场景是引用类型
(3)通过工厂模式创建
①动态工厂Bean(引用.方法名)


②静态工厂Bean(类名.方法名)

8.SpringIOC的作用域(在bean标签中添加属性scope=””)
(1)默认值:singleton 单态模式(每次创建的对象都是同一个对象)
(2)Prototype 原型模式(每次获得的实例是一个新的实例)
(3)request:每次请求时实例化对象.
(4)session:每次产生session(HttpSession)时实例化
(5)application:产生application对象时实例化.一般都实例化一次.
(6)golbal session: 全局Golbal Session,web应用中一个新的全局HttpSessin对象.在spring-webmvc-portlet提供

9.依赖注入DI
(1)设值注入(底层是通过set方法)
①域属性的注入(property标签)
②P命名空间注入
xmlns:p=“http://www.springframework.org/schema/p”

③ 关系/域属性的自动注入(byName/byType)
默认:autowire=“default”
要求:
byName:注入的bean的id必须与被注入的对象的属性名一致
byType:容器中与注入的bean的类型具有is-a关系的类只能有一个

(2)构造注入(底层通过有参构造器)
使用constructor-arg标签
(3)通过注解注入
环境搭建:导入aop包、添加context约束头信息(组件扫描器)
<context:component-scan base-package=“com.bjsxt.pojo”></context:component-scan>
@Component具有相同功能的还有其他三个注解
@Repository:该注解添加在DAO实现类上
@Service:该注解添加在Service实现类上
@Controller:该注解添加在Controller类上
@Component(value=””) (当只有一个value属性可以省略不写,value的值就相当于bean的id;在使用注解时,就相当于将当前类通过Spring容器管理对象的生命周期)
@Value(value=“”) (当是基本数据类型或String,使用该注解)

如果是关联属性:
1.Jdk提供的注解:@Resource 是通过byName自动注入的,如果没有找到,在通过byType
2.Spring 提供的注解:
(1)@Autowired 是通过byType自动注入的
(2)@Autowired @Qualifier(“引用名/相当于bean的id”) 组合使用
是通过byName自动注入的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值