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);
    }
}

这样即可完成自动注入

相关推荐
憨子周1 小时前
2M的带宽怎么怎么设置tcp滑动窗口以及连接池
java·网络·网络协议·tcp/ip
霖雨2 小时前
使用Visual Studio Code 快速新建Net项目
java·ide·windows·vscode·编辑器
SRY122404192 小时前
javaSE面试题
java·开发语言·面试
Fiercezm3 小时前
JUC学习
java
无尽的大道3 小时前
Java 泛型详解:参数化类型的强大之处
java·开发语言
ZIM学编程3 小时前
Java基础Day-Sixteen
java·开发语言·windows
我不是星海3 小时前
1.集合体系补充(1)
java·数据结构
P.H. Infinity3 小时前
【RabbitMQ】07-业务幂等处理
java·rabbitmq·java-rabbitmq
爱吃土豆的程序员3 小时前
java XMLStreamConstants.CDATA 无法识别 <![CDATA[]]>
xml·java·cdata
2401_857610034 小时前
多维视角下的知识管理:Spring Boot应用
java·spring boot·后端