设为首页 加入收藏

TOP

day11-实现Spring底层机制-01(一)
2023-07-25 21:43:17 】 浏览:97
Tags:day11- 实现 Spring -01

实现Spring底层机制-01

主要实现:初始化IOC容器+依赖注入+BeanPostProcessor机制+AOP

前面我们实际上已经使用代码简单实现了:

  1. Spring XML 注入 bean (Spring基本介绍02)
  2. Spring 注解方式注入 bean (Spring管理Bean-IOC-04)
  3. Spring AOP 动态代理实现 (AOP-01)

1.引出问题

1.1原生Spring如何实现依赖注入、singleton和prototype

例子

1.创建新的Maven项目:

image-20230127171741303

2.在pom.xml文件中添加 spring 开发的基本包:

<dependencies>
    <!--加入 spring 开发的基本包-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.8</version>
    </dependency>
    <!--加入spring开发切面编程需要的包-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>5.3.8</version>
    </dependency>
</dependencies>

3.src/main/java/ 目录下创建包 com/li/component,在该包下分别创建UserDao.java、UserService.java、UserAction.java

image-20230127180736676

UserDao:

package com.li.component;

import org.springframework.stereotype.Component;

/**
 * @author 李
 * @version 1.0
 */
//也可以使用 @Repository
@Component
public class UserDao {

    public void hi() {
        System.out.println("UserDao-hi()---");
    }
}

UserService:

package com.li.component;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author 李
 * @version 1.0
 */
//也可以使用 @Service
@Component
public class UserService {
    //定义属性
    //也可以使用 @Resource
    @Autowired
    private UserDao userDao;

    public void m1() {
        userDao.hi();
    }
}

UserAction:

package com.li.component;

import org.springframework.stereotype.Component;

/**
 * @author 李
 * @version 1.0
 * 一个 Controller
 */
//也可以使用 @Controller
@Component
public class UserAction {
}

4.在 src/main/resources 目录下创建 spring 的容器文件 beans.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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd">

    <!--配置自动扫描的包,同时引入对应的名称空间-->
    <!--说明:
        1.如果是普通的java项目,beans.xml 放在src 目录下即可
        2.如果是maven项目,beans.xml文件就要放在 src/main/resources 目录下-->
    <context:component-scan base-package="com.li.component"/>

</beans>

5.测试类中获取配置的bean,并输出对象的地址值

package com.li;

import com.li.component.UserAction;
import com.li.component.UserDao;
import com.li.component.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author 李
 * @version 1.0
 */
public class AppMain {
    public static void main(String[] args) {
        //测试是否可以得到spring容器中的bean
        ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");

        UserAction userAction = (UserAction) ioc.getBean("userAction");
        UserAction userAction2 = (UserAction) ioc.getBean("userAction");

        System.out.println(&
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spring Boot 防止接口被恶意刷新.. 下一篇读Java实战(第二版)笔记15_并行..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目