初学者快速了解spring的IOC和AOP原理
spring框架概述
1.spring是轻量级的开源的javaEE框架
2.spring可以解决企业应用开发的复杂性
3.spring有两个核心部分:IOC和AOP
(1)IOC:控制反转,把创建对象过程交给是spring进行管理
(2)AOP:面向切面,不修改源代码进行功能增强
IOC容器
IOC可以创建对象,降低代码的耦合,其创建对象有两种方式
1.IOC操作Bean管理(基于xml)
2.IOC操作Bean管理(基于注解)
IOC基于xml创建对象
1.在idea中创建一个spring项目
2.在resources文件夹下创建一个.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--集合类型属性的注入-->
<bean id="stu" class="collectiontype.Stu">
<!--数组类型属性注入-->
<property name="courses">
<array>
<value>java课程</value>
<value>数据库课程</value>
</array>
</property>
<!--list类型属性注入-->
<property name="list">
<list>
<value>张三</value>
<value>小三</value>
</list>
</property>
<!--map属性注入-->
<property name="maps">
<map>
<entry key="JAVA" value="java"></entry>
<entry key="PHP" value="php"></entry>
</map>
</property>
<!--set属性注入-->
<property name="sets">
<set>
<value>MySql</value>
<value>Redis</value>
</set>
</property>
<!--注入list集合类型,值是对象-->
<property name="courseList">
<list>
<ref bean="course2"></ref>
</list>
</property>
</bean>
<!--创建多个course对象-->
<bean id="course1" class="collectiontype.Course">
<property name="cname" value="spring5框架"></property>
</bean>
<bean id="course2" class="collectiontype.Course">
<property name="cname" value="MyBatis框架"></property>
</bean>
</beans>
3.以上的配置文件就是为了创建stu.java和配置其相关信息
stu.java 的代码如下
package collectiontype;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @author liuqunliang
* @date 2020/11/20 15:00
*/
public class Stu {
//1、数组类型的属性
private String[] courses;
//2、list集合类型属性
private List<String> list;
//3、map集合类型属性
private Map<String, String> maps;
//4、set集合类型属性
private Set<String> sets;
//学生所学多门课程
private List<Course> courseList;
public void setCourseList(List<Course> courseList) {
this.courseList = courseList;
}
public void setSets(Set<String> sets) {
this.sets = sets;
}
public void setCourses(String[] courses) {
this.courses = courses;
}
public void setList(List<String> list) {
this.list = list;
}
public void setMaps(Map<String, String> maps) {
this.maps = maps;
}
public void test() {
System.out.println(Arrays.toString(courses));
System.out.println(list);
System.out.println(maps);
System.out.println(sets);
System.out.println(courseList);
}
}
4.最后在测试看是否配置成功
@Test
public void testCollection() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Stu stu = context.getBean("stu", Stu.class);
stu.test();
}
以上是基于xml配置文件创建对象
IOC基于注解创建对象
为了简便开发,后面基本是基于全注解开发
1.创建一个类,通过@configuration将其变为配置文件,再通过@ComponentScan扫描该配置文件代码如下
package com.lin.spring.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* @author liuqunliang
* @date 2020/11/24 11:56
*/
//Configuration作为配置类,代替xml配置文件
@Configuration
//ConmponentScan相当于xml配置文件中的<context:component-scan base-package="com.lin.spring"></context:component-scan>
@ComponentScan(basePackages = {"com.lin.spring"})
public class SpringConfig {
}
2.再创建一个类,使用注解@Service来创建该对象,代码如下
package com.lin.spring.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Service;
/**
* @author liuqunliang
* @date 2020/11/24 11:59
*/
@Service
public class UserService {
public void out() {
System.out.println("调用UserService的out()方法");
}
}
3.最后在测试是否成功配置
@Test
public void testConfig() {
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
UserService userService = context.getBean("userService",UserService.class);
userService.out();
}
运行成功后
IOC基于注解创建对象时一些注解的作用
1.spring针对Bean管理中创建对象提供注解
(1)@component : spring中普通注解,用它可创建对象
(2)@service :一般用在业务逻辑层
(3)@controller :一般用在web层
(4)@Reposity
以上是个注解功能是一样的,都可以用来创建Bean实例
2.基于注解方式实现属性注入
(1)@AutoWired:根据属性类型自动装配
(2)@Qualifier:根据属性名称进行注入
(3)@Resource:可以根据类型注入,也可根据名称注入
(4)@Value:注入普通类型属性
为了避免文章过于冗余,AOP就下篇再讲
快速了解Spring中的AOP
本文地址:https://blog.csdn.net/qq_41761210/article/details/110872315
推荐阅读
-
Spring的IOC和AOP的基本使用
-
初学者快速了解spring的IOC和AOP原理
-
JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP、IOC)
-
【Spring AOP源码】基于JDK动态代理和Cglib创建代理对象的原理分析
-
Spring中的IOC和AOP以及Spring中的声明式事务
-
JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP、IOC)
-
初学者快速了解spring的IOC和AOP原理
-
关于spring,IOC和AOP的解析原理和举例 springiocaop
-
Spring中的IOC和AOP以及Spring中的声明式事务
-
【Spring AOP源码】基于JDK动态代理和Cglib创建代理对象的原理分析