idea-Spring框架与ioc容器

Sping是轻量级的开源J2EE框架,可以解决企业应用开发的复杂性

Spring有两个核心部分为Ioc和AOP

Ioc:控制反转,吧创建对象过程交给Sping进行管理

AOP:面向切面,不修改代码进行功能增强

创建Maven项目

IDEA-2024 就直接创建java项目即可

创建完成项目后需要在pom.xml文件中添加依赖这里我提了我使用的项目依赖,如果下载失败可以尝试自己安装maven然后将仓库设置为阿里云中央仓库

复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.24</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>5.3.24</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

Sping框架基础就配置好了

IOC底层实现

xml解析

工厂模式

反射技术

IOC思想基于IOC容器完成,IOC容器底层就是对象工厂

Sping提供了Ioc容器的两种实现方式(两个接口)

BeanFactory和APPlicationContext

ioc操作Bean管理

Bean管理是指

Sping创建对象

Spirng注入对象

public class User{

private String userName;

public void setUserName(String userName){

this.userName=userName;

}

}

Sping 一般使用自动注入如果你的xml配置没有出错那么你在项目中的

src/test/java右键新建就会出现xml文件,如果没有就是你的 pom.xml文件没有设置好

java 复制代码
<?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:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--bean是一个容器   class代表着文件的位置-->
    <bean id="c1" class="com.zk.c1">
        <constructor-arg value=""/>
        <!--name是一注入内容的方法   value代表着注入的内容-->
        <property name="f2" value="---c1代码"/>
    </bean>
</beans>

这是我的c1文件

java 复制代码
package com.zk;

public class c1 {
    private String f2;
    public c1() {

    }
    public c1(String f2) {
        this.f2 = f2;
    }

    public void f1(){
        System.out.println("adsfasdf"+f2);
    }
    public void setF2(String f2){
        this.f2 = f2;
    }


}

他还有很多别的注入方式

构造函数注入

<bean id="c1" class="com.zk.c1">

<constructor-arg index="0" value="-----xxxx-----">

</bean>

这是集合注入

复制代码
<?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="jh" class="com.zk.jh" >
    <property name="y" >
      <array>
          <value>1</value>
          <value>2</value>
          <value>3</value>
      </array>
    </property>
    <property name="z">
        <list>
            <value>1</value>
            <value>2</value>
            <value>3</value>
        </list>
    </property>
    <property name="w">
        <map>
           <entry key="1" value="2"></entry>
        </map>
    </property>
</bean>
</beans>
复制代码
package com.zk;

import java.util.List;
import java.util.Map;

public class jh {
    private int x;
    private String[] y;
    private List<String> z;
    private Map<String,String> w;

    public void setX(int x) {
        this.x = x;
    }

    public void setZ(List<String> z) {
        this.z = z;
    }

    public void setW(Map<String,String> w) {
        this.w = w;
    }
    public void setY(String[] x) {
       this.y = x;
    }
    public void g (){
        System.out.println(x+","+y+","+z+","+w);
    }
}

此处为我的jh文件

自动注入

复制代码
<?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"
       default-autowire="byType">

    <bean id="dao" class="com.zk.imp.c5dao"></bean>
    <bean id="dao2" class="com.zk.imp.c4dao"></bean>
    <bean id="c4dao" class="com.zk.selv.ceev" autowire="byType">
    </bean>

这里我自动注入了我的dao类

刚才的方法方法过于麻烦这里我们使用另外的方式

注解

注解是一种特殊的代码标记

@注解名(属性名 = 属性值)

复制代码
<?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
        http://www.springframework.org/schema/context/spring-context.xsd">
<!--注解的代码
    <context:component-scan base-package="com.zk.dao"/>
-->
</beans>

@Autowired根据属性类型进行自动装配

@Qualifier根据属性名称进行注入需要和 @Autowired一起使用

@Resource可以根据类型和名称注入

@value根据普通类型注入

复制代码
package com.zk.dao.img;


import com.zk.dao.a1dao;
import com.zk.dao.sev;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

@Component
public class uu implements sev {

    private a1dao dao;
    @Autowired
    @Qualifier(value = "aa1")
    public void adda1dap(a1dao dao){
        this.dao=dao;
    }
    @Override
    public void acc() {
        dao.cc();
    }
}
复制代码
package com.zk.dao.img;

import com.zk.dao.a1dao;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

@Component
public class aa1 implements a1dao {
    @Override
    public void cc() {
        System.out.println(123);
    }
}

这样即可完成自动注入

相关推荐
骑士雄师21 分钟前
Java 泛型中级面试题及答案
java·开发语言·面试
曾令胜6 小时前
excel导出使用arthas动态追踪方法调用耗时后性能优化的过程
spring·性能优化·excel
.格子衫.6 小时前
Spring Boot 原理篇
java·spring boot·后端
多云几多6 小时前
Yudao单体项目 springboot Admin安全验证开启
java·spring boot·spring·springbootadmin
摇滚侠8 小时前
Spring Boot 3零基础教程,Spring Intializer,笔记05
spring boot·笔记·spring
Jabes.yang9 小时前
Java求职面试实战:从Spring Boot到微服务架构的技术探讨
java·数据库·spring boot·微服务·面试·消息队列·互联网大厂
聪明的笨猪猪9 小时前
Java Redis “高可用 — 主从复制”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
兮动人9 小时前
Spring Bean耗时分析工具
java·后端·spring·bean耗时分析工具
MESSIR229 小时前
Spring IOC(控制反转)中常用注解
java·spring
摇滚侠9 小时前
Spring Boot 3零基础教程,Demo小结,笔记04
java·spring boot·笔记