对于IOC的注入两种方式(注解和XML)

xml进行注入

在Spring IoC 容器中基于xml完成对Bean的装配,创建测试类,获取ProductController的实例,调用其save()方法,在控制台上打印Product的信息

spring-config.xml
java 复制代码
<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:aop="http://www.springframework.org/schema/aop"

       xsi:schemaLocation="

       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    
        <bean id="productController" class="com.yt.Controller.ProductController">



        </bean>


    </beans>
ProductTest
java 复制代码
@Test

public void test2(){


    Product product = new Product(12, "111", "111", 123);
//这里是要根据target的相对路径来获取的相应的xml文件的的位置的

    ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("spring-config.xml");

    ProductController productController = (ProductController) classPathXmlApplicationContext.getBean("productController");

    productController.save(product);

}

注解注入

在Spring IoC 容器中基于注解(@Autowired)完成对Bean的装配,创建测试类,获取ProductController的实例,调用其save()方法,在控制台上打印Product的信息

AppConfig
java 复制代码
package com.yt.config;



import org.springframework.context.annotation.ComponentScan;



/**

 * @program: mybatis-operate

 * @description

 * @author: YangTao

 * @create: 2024-04-22 08:43

 **/

@ComponentScan("com.yt")

public class AppConfig {

}
Product
java 复制代码
package com.yt;



/**

 * @program: mybatis-operate

 * @description

 * @author: YangTao

 * @create: 2024-04-22 08:25

 **/

public class Product {

    private Integer id;

    private String name;

    private String subTitle;

    private float price;



    public Product(Integer id, String name, String subTitle, float price) {

        this.id = id;

        this.name = name;

        this.subTitle = subTitle;

        this.price = price;

    }



    public Integer getId() {

        return id;

    }



    public void setId(Integer id) {

        this.id = id;

    }



    public String getName() {

        return name;

    }



    public void setName(String name) {

        this.name = name;

    }



    public String getSubTitle() {

        return subTitle;

    }



    public void setSubTitle(String subTitle) {

        this.subTitle = subTitle;

    }



    public float getPrice() {

        return price;

    }



    public void setPrice(float price) {

        this.price = price;

    }



    @Override

    public String toString() {

        return "Product{" +

                "id=" + id +

                ", name='" + name + '\'' +

                ", subTitle='" + subTitle + '\'' +

                ", price=" + price +

                '}';

    }

}
Controller
java 复制代码
package com.yt.Controller;



import com.yt.Product;

import com.yt.Service.ProductService;

import org.springframework.stereotype.Controller;



/**

 * @program: mybatis-operate

 * @description

 * @author: YangTao

 * @create: 2024-04-22 08:27

 **/

@Controller

public class ProductController {

        private ProductService productService;



        public void save(Product product){

            System.out.println("hello");

//            productService.save(product);// 调用业务层接口的保存方法

        }

}
Service
java 复制代码
package com.yt.Service;



import com.yt.Product;

import org.springframework.stereotype.Service;



/**

 * @program: mybatis-operate

 * @description

 * @author: YangTao

 * @create: 2024-04-22 08:28

 **/

public interface ProductService {

    public void save(Product product); // 保存商品操作

}









package com.yt.Service.ServiceImpl;



import com.yt.Product;

import com.yt.Service.ProductService;

import org.springframework.stereotype.Service;



/**

 * @program: mybatis-operate

 * @description

 * @author: YangTao

 * @create: 2024-04-22 08:28

 **/

@Service

public class ProductServiceImpl implements ProductService {

    @Override

    public void save(Product product) {

        System.out.println(product); // 实现接口中定义的方法

    }

}
ProductTest
java 复制代码
public class ProductTest {



    @Test

    public void test1(){

        Product product = new Product(12, "111", "111", 123);

        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

        ProductController productController = (ProductController) annotationConfigApplicationContext.getBean(ProductController.class);

        productController.save(product);





        ProductService productService = (ProductService) annotationConfigApplicationContext.getBean(ProductService.class);

        productService.save(product);

    }

}
相关推荐
〆、风神1 小时前
Spring Boot实战:基于策略模式+代理模式手写幂等性注解组件
spring boot·代理模式·策略模式
Anarkh_Lee2 小时前
解决 Spring Boot 多数据源环境下事务管理器冲突问题(非Neo4j请求标记了 @Transactional 尝试启动Neo4j的事务管理器)
spring boot·后端·spring
日月星辰Ace2 小时前
@TestPropertySource 造成 SpringBoot Test 中对同一个 Bean 使用不同实例
java·spring boot
XuanXu2 小时前
SpringBoot3.0启动流程研究
java·spring boot
bing_1584 小时前
在 Spring Boot 项目中,如何进行高效的数据库 Schema 设计?
数据库·spring boot·后端·数据库schema设计
luckilyil5 小时前
springboot自定义starter(避坑教学)
java·spring boot·spring
kfepiza6 小时前
HttpSessionAttributeListener 的用法笔记250417
java·spring boot·笔记·servlet·java-ee·tomcat
苹果酱05676 小时前
redis系列--1.redis是什么
java·vue.js·spring boot·mysql·课程设计
扣丁梦想家7 小时前
Spring Boot 实现 Excel 导出功能(支持前端下载 + 文件流)
spring boot·后端·excel
Java程序之猿7 小时前
Spring Boot 集成spring-boot-starter-data-elasticsearch
spring boot·elasticsearch·jenkins