初学者快速了解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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值