Spring框架
- IOC(控制反转)/DI(依赖注入)
- 概念:
- IOC:将对象的创建过程转移给spring容器去完成,分离关注点
- DI:创建对象实例时,同时给此对象注入所依赖的属性,将组件的构建和使用分开
- 所需jar文件:
限制版本配置方式:
- spring配置对象:
<bean id=”” class=”” scope=”” lazy-init=”” init-method=”” destroy=””></bean>
注:scope的值有两种:
singleton单例 整个容器中只有一个对象实例 ,每次总是访问同一个对象(默认是单例)
prototype原型 每次获取bean都产生一个新的对象(效率降低)
Lazy-init属性的值有两种:
true:延迟初始化,在用到对象的时候才会创建对象
false:默认值,不延迟创建,启动时候就会创建对象
- 加载spring配置文件两种方式:
- 利用FileSystemXmlApplicationContext从路径获取文件
ApplicationContext context1 = new FileSystemXmlApplicationContext("D://ssm-workspace//Spring_Ioc//resources//spring.xml");
(2)利用ClassPathXmlApplicationContext从资源目录下获取spring文件
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
注:资源目录:Maven项目resources、web项目src
- 依赖注入的方式:
- <property name=”” value=””></property> name属性名、value属性值
- <property name=”” ref=””></property> ref引入其他对象
- 构造方法注入值:<constructor-arg name=”” value=””></constructor-arg>
- p命名空间注入值:
- 头文件注入
xmlns:p="http://www.springframework.org/schema/p"
<bean id=”” class=”” p:属性=”” p:属性-ref=””></bean>
(5)spel注入:<property name=”” value=”#{对象名.属性名}”></property>
(6)list:<property><list><value></value>...<value></value></list></property>
(7)map:<property>
<entry>
<key><value></value></key>
<value></value>
</entry>
</property>
(8)、<property name="info">
<props>
<prop key="学号">50222</prop>
<prop key="sex">5</prop>
</props>
</property>
- 注解配置方式
- 所需jar文件:
(2)给某个类创建对象的注解:
注:在类名上方加上@Component注解后,意为将UserController让spring管理,相当于:
<bean id=”userController” class=”com.qianf.controller.UserController”></bean>
特别注意,每个类都有默认无参构造方法。如果此类写了有参构造方法,需手动生成无参构造方法;如果没有写有参构造方法,此类会有默认无参构造方法,可以不写
(3)在spring文件中添加:扫描此包下有注解的类并创建此类的对象
<!--扫描包设置-->
<context:component-scan base-package="com.qianf.controller"/>
注:如果想用注解方式让spring来管理对象,必须在spring.xml文件中配置此扫描设置,扫描某个包下所有类,哪个类上写了@Component,spring就会管理哪个类
(4)给此对象的属性赋值
(5)@Value(“”)注解得作用是给普通变量类型赋值
(6)如果类属性中出现其他类对象,需要利用@Autowired(自动装配)注解,并且自动装配 得类也要交给spring管理才能自动装配
自动扫描就需要在扫描此类所在得包才能得到
<context:component-scan base-package="com.qianf.controller,com.qianf.service"/>
(7)@Qualifier(“对象名”),标记具体用哪一个接口实现类
如果上述UserService是一个接口,并且有两个接口实现类:
UserServiceImpl1,UserServiceImpl2,需要用@Qualifier来标记,此处接口用哪个实现类
(8)@Resource(“接口实现类名”) ==@Autowired+@Qualifier(“接口实现类名”)
- AOP:Aspect Oriented Programming 面向切面编程
- Aop目标:让我们可以专心做事:
- 将复杂得需求分解出不同方面,将散布在系统中得公共功能集中解决
- 采用代理机制组装起来运行,在不改变原程序得基础上对代码进行增强处理,增加新功能
- Aop相关术语:
- 增强处理(Advice):
- 切入点(Pointcut):
- 连接点(Join Point):
- 切面(Aspect):
- 目标对象(Target Object):
- AOP代理(AOP proxy):
- 织入(Weaving):
- 注解: