初识Spring-ioc

这篇具有很好参考价值的文章主要介绍了初识Spring-ioc。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Spring的简介

Spring是一个开源的Java开发框架,用于构建企业级应用程序。它提供了一种轻量级的、非侵入式的编程模型,使得开发者可以更加简单地构建可扩展、可维护的应用程序。
Spring框架的核心特性包括依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented
Programming)。依赖注入使得开发者可以将对象之间的依赖关系交由框架来管理,从而降低了组件之间的耦合度。面向切面编程则提供了一种在应用程序中横切关注点的方式,例如日志记录、事务管理等。
Spring框架还提供了许多其他功能和模块,如Spring MVC用于构建Web应用程序、Spring
Data用于简化数据库访问、Spring
Security用于身份验证和授权等。这些模块可以根据需要进行选择和集成,使得开发者可以根据自己的需求来构建定制化的应用程序。
总的来说,Spring框架通过提供一种简单、灵活的开发方式,帮助开发者构建高效、可扩展的Java应用程序。它已经成为Java开发领域中最受欢迎的框架之一,并被广泛应用于各种企业级应用程序的开发中。

2.Spring容器ioc的特点

Spring的IOC(Inversion of Control)容器是Spring框架的核心组件之一,它具有以下特点:
依赖注入(Dependency Injection)
:IOC容器通过依赖注入的方式管理对象之间的依赖关系。开发者只需要定义好对象之间的依赖关系,IOC容器会负责实例化对象并自动注入所需的依赖,从而降低了组件之间的耦合度。
配置灵活性:IOC容器使用外部配置文件(如XML、注解或Java配置类)来描述对象的创建和依赖关系,这使得应用程序的配置更加灵活。开发者可以根据需要修改配置文件,而无需修改源代码,从而实现应用程序的灵活性和可维护性。
单例管理:IOC容器默认情况下管理的对象是单例的,即每个对象在容器中只有一个实例。这样可以节省资源并提高性能。开发者也可以通过配置来改变对象的作用域,如原型(每次请求都创建新的实例)或会话(每个会话创建一个实例)。
生命周期管理:IOC容器负责管理对象的生命周期,包括对象的创建、初始化和销毁。开发者可以通过配置回调方法(如初始化方法和销毁方法)来实现对对象生命周期的控制。
AOP集成:IOC容器与面向切面编程(AOP)紧密集成,可以通过配置将横切关注点(如日志、事务管理)应用到应用程序中的多个对象上,从而提高代码的重用性和可维护性。
总的来说,Spring的IOC容器通过依赖注入、灵活的配置、单例管理、生命周期管理和AOP集成等特点,提供了一种简单、灵活、可扩展的对象管理机制,帮助开发者构建可维护、可测试的应用程序。

3.spring注入方式

Spring框架提供了多种方式来实现依赖注入(Dependency Injection): 构造函数注入(Constructor
Injection):通过构造函数来注入依赖。在类的构造函数中声明依赖的参数,Spring容器会根据配置自动实例化并注入所需的依赖。

1.Setter方法注入(Setter Injection):通过Setter方法来注入依赖。在类中定义对应的Setter方法,并在方法中接收依赖的参数,Spring容器会通过调用Setter方法来注入所需的依赖。

模拟:

package com.niyin.ioc.web;

import com.niyin.ioc.impl.UserServiceImpl;
import com.niyin.ioc.impl.UserServiceImpl1;
import com.niyin.ioc.service.UserService;

import java.util.List;

public class GoodsAction {
    private UserService userService;
 private String gname;
 private  int age;
 private List<String>peoples;

    public String getGname() {
        return gname;
    }

    public void setGname(String gname) {
        this.gname = gname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public List<String> getPeoples() {
        return peoples;
    }

    public void setPeoples(List<String> peoples) {
        this.peoples = peoples;
    }

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public String update(){
        userService.update();
        return "list";
    }
public void pros(){
    System.out.println(this.gname);
    System.out.println(this.age);
    System.out.println(this.peoples);
};

}

package com.niyin.ioc.demo;

import com.niyin.ioc.web.GoodsAction;
import com.niyin.ioc.web.UserAction;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class demo1 {
    public static void main(String[] args) {

        ClassPathXmlApplicationContext context= new ClassPathXmlApplicationContext("/sping-context.xml");


        UserAction userAction= (UserAction) context.getBean("userAction");
        userAction.update();
        GoodsAction goodsAction= (GoodsAction) context.getBean("goodsAction");
        goodsAction.update();
        System.out.println("--------------------------------");
        goodsAction.pros();
        System.out.println("---------------------------------");
        userAction.pros();
    }


}

 <bean class="com.niyin.ioc.web.GoodsAction" id="goodsAction">

        <property name="userService" ref="userService"></property>
    <property name="gname" value="雨伞"></property>
        <property name="age" value="1"></property>
        <property name="peoples" >
            <list>
                <value>男的</value>
                <value>女的</value>

            </list>
        </property>

    </bean>

2.构造函数注入

package com.niyin.ioc.web;

import com.niyin.ioc.impl.UserServiceImpl;
import com.niyin.ioc.service.UserService;

import java.util.List;

public class UserAction {

    private UserService userService;
    private String uname;
    private int age;
    private List<String>hobby;

    public UserAction() {
    }

    public UserAction(String uname, int age, List<String> hobby) {
        this.uname = uname;
        this.age = age;
        this.hobby = hobby;
    }

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public String update(){
        userService.update();
        return "list";
    }
    public void pros(){
        System.out.println(this.uname);
        System.out.println(this.age);
        System.out.println(this.hobby);
    };
}

package com.niyin.ioc.demo;

import com.niyin.ioc.web.GoodsAction;
import com.niyin.ioc.web.UserAction;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class demo1 {
    public static void main(String[] args) {

        ClassPathXmlApplicationContext context= new ClassPathXmlApplicationContext("/sping-context.xml");


        UserAction userAction= (UserAction) context.getBean("userAction");
        userAction.update();
        GoodsAction goodsAction= (GoodsAction) context.getBean("goodsAction");
        goodsAction.update();
        System.out.println("--------------------------------");
        goodsAction.pros();
        System.out.println("---------------------------------");
        userAction.pros();
    }


}

<bean class="com.niyin.ioc.web.UserAction" id="userAction">

    <property name="userService" ref="userService"></property>
<constructor-arg name="uname" value="袁辉sb"></constructor-arg>
    <constructor-arg name="age" value="11"></constructor-arg>
    <constructor-arg name="hobby" >
        <list>
            <value>
                农村
            </value>
            <value>
                农村
            </value>
            <value>
                农村
            </value>

        </list>
    </constructor-arg>

</bean>

3.在Spring IOC(控制反转)中,"byname"和"bytype"是两种不同的依赖注入方式。

ByName(按名称):当使用ByName方式进行依赖注入时,Spring容器会根据依赖对象的名称来进行匹配和注入。在配置文件中,需要使用元素的name属性来指定依赖对象的名称。Spring容器会在容器中查找与指定名称匹配的bean,并将其注入到相应的属性中。

4.1 使用Spring MVC框架:Spring MVC是Spring框架的一部分,用于开发基于MVC模式的Web应用程序。通过配置Spring MVC,可以将请求映射到相应的控制器,并实现灵活的请求处理和视图渲染。
4.2 使用Spring Boot:Spring Boot是Spring框架的扩展,用于简化Spring应用程序的开发和部署。Spring Boot提供了内嵌的Web容器,可以直接运行Spring应用程序,无需额外配置。
4.3 使用Spring和其他Web容器的集成:Spring框架可以与其他常见的Web容器(如Tomcat、Jetty等)进行集成,通过配置文件或注解来实现。
配置监听器

1.监听器

package com.niyin.ioc.listerner;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class SpingLoadListener implements ServletContextListener {
    public void contextInitialized(ServletContextEvent sce) {

        ClassPathXmlApplicationContext context= new ClassPathXmlApplicationContext("/sping-context.xml");
ServletContext servletContext= sce.getServletContext();
servletContext.setAttribute("springContext",context);

    }
}

2.servlet

package com.niyin.ioc.web;

import com.niyin.ioc.service.UserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/userList")
public class userservlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
     }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        ClassPathXmlApplicationContext context= (ClassPathXmlApplicationContext) req.getServletContext().getAttribute("spingContext");
         UserService userService= (UserService) context.getBean("userService");
        System.out.println(userService);
        userService.update();
    }
}

4.总结

本文深入探讨了Spring IOC容器的工作原理,包括配置文件、Bean的定义、实例化、装配、生命周期管理和获取等方面。通过理解和应用Spring IOC容器,我们可以更好地开发和管理Java应用程序,提高代码的可维护性和可测试性。希望本文对读者有所帮助,谢谢阅读!文章来源地址https://www.toymoban.com/news/detail-652663.html

到了这里,关于初识Spring-ioc的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java EE】Spring核心思想(一)——IOC

    通过前⾯的学习, 我们知道了Spring是⼀个开源框架, 他让我们的开发更加简单. 他⽀持⼴泛的应⽤场 景, 有着活跃⽽庞⼤的社区, 这也是Spring能够⻓久不衰的原因. 但是这个概念相对来说, 还是⽐较抽象. 我们⽤⼀句更具体的话来概括Spring, 那就是: Spring 是包含了众多⼯具⽅法的

    2024年04月23日
    浏览(54)
  • 【Java面试】Spring中的IOC和AOP

    IOC:控制反转也叫依赖注入。利用了工厂模式 将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的

    2024年02月10日
    浏览(50)
  • 【Java学习】 Spring的基础理解 IOC、AOP以及事务

        官网: https://spring.io/projects/spring-framework#overview     官方下载工具: https://repo.spring.io/release/org/springframework/spring/     github下载: https://github.com/spring-projects/spring-framework     maven依赖: 1.spring全家桶的结构构图:              最下边的是测试单元   其中spring封装

    2024年02月09日
    浏览(43)
  • java八股文面试[Spring]——如何实现一个IOC容器

            IOC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出 松耦合 ,更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IOC容器后,把 创建和查找依赖对象 的控制

    2024年02月10日
    浏览(48)
  • Spring IOC容器:让Java对象的管理和配置更简单

    在Java开发中,我们经常需要创建和使用各种Java对象,例如实体类,服务类,控制器类等。这些对象之间通常存在着一定的依赖关系,例如一个服务类可能需要调用另一个服务类或一个数据访问类的方法。为了创建和使用这些对象,我们通常需要做以下几件事: 在代码中通过

    2024年02月11日
    浏览(40)
  • Java Spring IoC&DI :探索Java Spring中控制反转和依赖注入的威力,增强灵活性和可维护性

    💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:Java Spring IoCDI :探索Java Spring中控制反转和依赖注入的威力,增强灵活性和可维护性 🎉欢迎大家点赞👍评论📝收藏⭐文章 我们一下要学习的内容都是为了实现⾼内聚低耦合来进行的 软件设计原则:⾼内聚低耦合. ⾼内聚指

    2024年04月15日
    浏览(48)
  • Java面试题:你知道Spring的IOC吗?那么,它为什么这么重要呢?

    Spring的IOC(控制反转)是一种设计模式,它允许开发者将对象的创建和管理交给Spring框架来完成。在Spring中,IOC允许开发者将对象依赖关系从代码中分离出来,从而使代码更加灵活、可重用和易于管理。 IoC 全称Inverse of Control( 反向控制或控制反转 )。 在类和类之间存在控

    2024年04月28日
    浏览(99)
  • Java后端07(Spring)

    ​涉及的设计模式:单例模式,简单工厂模式,代理模式,观察者模式,反射,注解。。。。。 ​在传统模式下,对象的创建和赋值,都是由开发者自己手动完成,事实情况下,开发者只关心如何获取赋值好的对象,但是并不希望自己手动进行创建对象和赋值的事情(sprin

    2024年02月13日
    浏览(36)
  • 【Java EE】初识Spring Web MVC

    Spring Web MVC 是 基于 Servlet API 构建的原始 Web 框架 ,从⼀开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为)Spring MVC). Servlet是⼀种实现动态⻚⾯的技术.准确来讲Servlet是⼀套Java Web 开发的规范,或者说是⼀套Java Web 开发的

    2024年04月10日
    浏览(56)
  • Java后端07(Spring未完成)

    ​涉及的设计模式:单例模式,简单工厂模式,代理模式,观察者模式,反射,注解。。。。。 ​在传统模式下,对象的创建和赋值,都是由开发者自己手动完成,事实情况下,开发者只关心如何获取赋值好的对象,但是并不希望自己手动进行创建对象和赋值的事情(sprin

    2024年02月14日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包