Java学习路线-56:Spring与Ioc(1)

简介: Java学习路线-56:Spring与Ioc

Spring

官网:https://spring.io/


理念:使现有技术更加实用,本身是大杂烩整合现有的框架技术


优点:


轻量级框架

Ioc 容器-控制反转 inversion of Control

Aop 面向切面编程

对事务支持

对框架的支持

一、Ioc 控制反转

Ioc 是一种编程思想,由主动编程变为被动接收


别名:依赖注入 dependency injection


控制:

指谁来控制对象的创建

传统的应用程序对象的创建是由程序本身控制的

使用 spring 之后,由 spring 创建对象


反转:

正转指程序来创建对象

反转指程序本身不创建对象,而变成被动接受对象


总结:

以前对象是由程序本身创建,

使用 spring 之后,程序变为接收 spring 创建好的对象


简单示例

1、依赖 pom.xml


 

org.springframework
   spring-context-support
   5.2.6.RELEASE
   org.springframework
   spring-context
   5.2.6.RELEASE



2、Person.java


package com.pengshiyu.bean;
public class Person {
    private String name;
    public void setName(String name) {
        this.name = name;
    }
    public void sayHello() {
        System.out.println("hello " + this.name);
    }
}



3、beans.xml


此处是完整写法,之后将采用简写形式



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">

 




4、Demo.java


package com.pengshiyu.spring;
import com.pengshiyu.bean.Person;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Demo {
    public static void main(String[] args) {
        // 解析beans.xml 文件,生成对应的Bean对象
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        Person person = (Person)context.getBean("person");
        person.sayHello();
    }
}




二、Dao 管理示例

Ioc: 对象由 spring 来创建


1、UserDao


package com.spring.dao;
public interface UserDao {
    public void getUser();
}



2、UserDaoMysqlImpl


package com.spring.dao.impl;
import com.spring.dao.UserDao;
public class UserDaoMysqlImpl implements UserDao {
    @Override
    public void getUser() {
        System.out.println("Mysql 获取用户信息");
    }
}




3、UserDaoOracleImpl


package com.spring.dao.impl;
import com.spring.dao.UserDao;
public class UserDaoOracleImpl implements UserDao {
    @Override
    public void getUser() {
        System.out.println("Oracle 获取用户信息");
    }
}




4、UserService


package com.spring.service;
public interface UserService {
    public void getUser();
}



5、UserServiceImpl


package com.spring.service.impl;
import com.spring.dao.UserDao;
import com.spring.service.UserService;
public class UserServiceImpl implements UserService {
    private UserDao userDao = null;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    @Override
    public void getUser() {
        this.userDao.getUser();
    }
}





6、beans.xml(简化版)


7、TestDemo


package com.spring.test;
import com.spring.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDemo {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        UserService service = (UserService)context.getBean("service");
        service.getUser();
    }
}




三、使用 Ioc 来创建对象的 3 种方法

Person 类


package com.pengshiyu.bean;
public class Person {
    private String name;
    public Person() {
    }
    public Person(String name) {
        this.name = name;
    }
    public void sayHello() {
        System.out.println("hello " + this.name);
    }
}



创建对象


package com.spring.test;
import com.pengshiyu.bean.Person;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Demo {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        Person person = (Person) context.getBean("person");
        person.sayHello();
    }
}




beans.xml(简化版)


1、无参构造

<beans>
    <bean name="person" class="com.pengshiyu.bean.Person" />
</beans>



2、有参构造


(1)根据参数下标设置


 

<beans>
    <bean name="person" class="com.pengshiyu.bean.Person">
        <!-- index 构造方法下标从 0 开始 -->
        <constructor-arg index="0" value="Tom" />
    </bean>
</beans>


(2)根据参数名称设置


 

<beans>
    <bean name="person" class="com.pengshiyu.bean.Person">
        <!-- name 参数名-->
        <constructor-arg name="name" value="Tom" />
    </bean>
</beans>

     



(3)根据参数类型设置


 

<beans>
    <bean name="person" class="com.pengshiyu.bean.Person">
         <!-- type 参数类型 -->
        <constructor-arg type="java.lang.String" value="Tom" />
    </bean>
</beans>

     

     

相关文章
|
3月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
484 3
|
3月前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
375 3
|
3月前
|
SQL Java 数据库
2025 年 Java 从零基础小白到编程高手的详细学习路线攻略
2025年Java学习路线涵盖基础语法、面向对象、数据库、JavaWeb、Spring全家桶、分布式、云原生与高并发技术,结合实战项目与源码分析,助力零基础学员系统掌握Java开发技能,从入门到精通,全面提升竞争力,顺利进阶编程高手。
725 1
|
2月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
3月前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
1869 58
|
2月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
2月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
150 8
|
3月前
|
SQL 算法 Java
零基础到精通的史上最强 Java 学习路线图推荐
史上最全Java学习路线图,涵盖基础语法、面向对象、数据结构与算法、多线程、JVM、Spring框架、数据库及项目实战,助你从零基础到精通Java开发,附完整代码与工具推荐。
278 3
零基础到精通的史上最强 Java 学习路线图推荐
|
3月前
|
监控 Java 数据库
从零学 Dropwizard:手把手搭轻量 Java 微服务,告别 Spring 臃肿
Dropwizard 整合 Jetty、Jersey 等成熟组件,开箱即用,无需复杂配置。轻量高效,启动快,资源占用少,内置监控、健康检查与安全防护,搭配 Docker 部署便捷,是构建生产级 Java 微服务的极简利器。
363 3
|
3月前
|
NoSQL Java 关系型数据库
超全 Java 学习路线,帮你系统掌握编程的超详细 Java 学习路线
本文为超全Java学习路线,涵盖基础语法、面向对象编程、数据结构与算法、多线程、JVM原理、主流框架(如Spring Boot)、数据库(MySQL、Redis)及项目实战等内容,助力从零基础到企业级开发高手的进阶之路。
350 1

热门文章

最新文章