Spring (1) IOC

spring IOC源码分析(1) 1.何谓Spring IOC         何谓Spring IOC?书上谓之“依赖注入”,那何谓“依赖注入”?         作为一个Java程序猿,应该遇到过这样的问题,当你在代码中需要使用某个类提供的功能时,你首先需要new一个对象,给它传递必要的参数,然后才能使用它提供的功能,最后释放对象占用的内存,当然了这个在Java不需要你自己去干了。这也就是说你需要自己去管理变量的整个生命周 阅读详情

1 环境要求

        (1) IDEA开发工具: 2022.3.3

        (2) JDK: Java17+

        (3) Maven: 3.6+

        (4) Spring: 6+

2 准备工作

2.1 引入Spring相关依赖

<dependencies>
	<!--spring的核心IOC容器,spring的任何部分运行都基于IOC容器,即spring的基础依赖-->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>${spring-version}</version>
	</dependency>

	<!--junit5测试-->
	<dependency>
		<groupId>org.junit.jupiter</groupId>
		<artifactId>junit-jupiter-api</artifactId>
		<version>5.10.0</version>
	</dependency>

	<!--日志门面接口:slf4j-->
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-api</artifactId>
		<version>2.0.9</version>
	</dependency>
	<!-- 日志框架(具体实现):logback -->
	<dependency>
		<groupId>ch.qos.logback</groupId>
		<artifactId>logback-classic</artifactId>
		<version>1.4.11</version>
	</dependency>
    <!--log4j-->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.20.0</version>
    </dependency>

	<!--Spring AOP依赖-->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-aop</artifactId>
		<version>${spring-version}</version>
	</dependency>
	<!--Spring aspect依赖-->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-aspects</artifactId>
		<version>${spring-version}</version>
	</dependency>
    <!--动态代理AOP:解析”切入点表达式”-->
<!--    <dependency>-->
<!--        <groupId>org.aspectj</groupId>-->
<!--        <artifactId>aspectjweaver</artifactId>-->
<!--        <version>1.8.14</version>-->
<!--    </dependency>-->

	<!--MySQL数据库驱动-->
<!--	<dependency>-->
<!--		<groupId>mysql</groupId>-->
<!--		<artifactId>mysql-connector-java</artifactId>-->
<!--		<version>8.0.31</version>-->
<!--	</dependency>-->
	<!--(新)MySQL数据库驱动,配置文件mysql.driver=com.mysql.cj.jdbc.Driver-->
	<dependency>
		<groupId>com.mysql</groupId>
		<artifactId>mysql-connector-j</artifactId>
		<version>8.1.0</version>
	</dependency>
	<!--mybatis-->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.5.13</version>
	</dependency>
	<!--Spring集成Mybatis-->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis-spring</artifactId>
		<version>3.0.2</version>
	</dependency>

	<!--阿里druid连接池(数据源)-->
	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>druid</artifactId>
		<version>1.2.19</version>
	</dependency>
	<!--c3p0连接池(数据源)-->
	<dependency>
		<groupId>com.mchange</groupId>
		<artifactId>c3p0</artifactId>
		<version>0.9.5.5</version>
	</dependency>
	<!--Spring的JdbcTemplate连接池(数据源)-->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-jdbc</artifactId>
		<version>${spring-version}</version>
	</dependency>
	<!--Spring为我们提供的”事务管理器”(要做”声明式事务”必须引入的包)-->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-tx</artifactId>
		<version>${spring-version}</version>
	</dependency>

	<!--fastJson的依赖-->
	<dependency>
		<groupId>com.alibaba.fastjson2</groupId>
		<artifactId>fastjson2</artifactId>
		<version>2.0.41</version>
	</dependency>
	<!--jackson的依赖:包含了SpringMVC中@RequestBody解析JSON数据功能-->
	<dependency>
		<groupId>com.fasterxml.jackson.core</groupId>
		<artifactId>jackson-databind</artifactId>
		<version>2.15.2</version>
	</dependency>

	<!--servlet的依赖-->
<!--	<dependency>-->
<!--		<groupId>javax.servlet</groupId>-->
<!--		<artifactId>javax.servlet-api</artifactId>-->
<!--		<version>4.0.1</version>-->
<!--		<scope>provided</scope>&lt;!&ndash;compile默认的,全范围有效;  test测试有效;  provided其它地方没有就生效,其它地方有了就用其它地方的;  runtime运行时有效,编译时无效; &ndash;&gt;-->
<!--	</dependency>-->
	<!--tomcat10依赖的servlet-->
	<dependency>
		<groupId>jakarta.servlet</groupId>
		<artifactId>jakarta.servlet-api</artifactId>
		<version>6.0.0</version>
		<scope>provided</scope>
	</dependency>
    <!--解决"无法访问jakarta.servlet.ServletException"-->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-api</artifactId>
        <version>10.1.13</version>
    </dependency>
    <!--SpringMVC依赖包-->
    <dependency>
        <groupId>org.springframework</groupId><!--依赖spring-web,但maven会自动导入-->
        <artifactId>spring-webmvc</artifactId>
        <version>${spring-version}</version>
    </dependency>

	<!--内含StringUtils工具类-->   <!--StringUtils.isEmpty()判断null和””-->   <!--StringUtils.isBlank()在isEmpty的基础上增加判断空白符(空格,制表符\t,换行符\n,换页符\f,回车符\r)-->
	<dependency>
		<groupId>commons-lang</groupId>
		<artifactId>commons-lang</artifactId>
		<version>2.6</version>
	</dependency>

	<!--腾讯云短信服务SMS(Short Message Service)-->
	<dependency>
		<groupId>com.github.qcloudsms</groupId>
		<artifactId>qcloudsms</artifactId>
		<version>1.0.6</version>
	</dependency>

	<!--ApachePOI,HSSF对象,操作.xls-->
	<dependency>
		<groupId>org.apache.poi</groupId>
		<artifactId>poi</artifactId>
		<version>5.2.3</version>
	</dependency>
	<!--ApachePOI,XSSF对象,操作.xlsx-->
	<dependency>
		<groupId>org.apache.poi</groupId>
		<artifactId>poi-ooxml</artifactId>
		<version>5.2.3</version>
	</dependency>

	<!--Redis-->
	<dependency>
		<groupId>redis.clients</groupId>
		<artifactId>jedis</artifactId>
		<version>3.5.2</version>
	</dependency>
	<dependency>  <!--连接池-->
		<groupId>org.apache.commons</groupId>
		<artifactId>commons-pool2</artifactId>
		<version>2.10.0</version>
	</dependency>
        <!--文件上传的依赖包,针对CommonsMultipartResolver,而使用StandardServletMultipartResolver则不需要下面的依赖-->
<!--        <dependency>  &lt;!&ndash;内部自带一个common-io包&ndash;&gt;-->
<!--            <groupId>commons-fileupload</groupId>-->
<!--            <artifactId>commons-fileupload</artifactId>-->
<!--            <version>1.5</version>-->
<!--        </dependency>-->
<!--        <dependency>-->
<!--            <groupId>commons-io</groupId>-->
<!--            <artifactId>commons-io</artifactId>-->
<!--            <version>2.13.0</version>-->
<!--        </dependency>-->
<!--        &lt;!&ndash;远程文件上传&ndash;&gt;-->
<!--        <dependency>-->
<!--            <groupId>com.sun.jersey</groupId>-->
<!--            <artifactId>jersey-core</artifactId>-->
<!--            <version>1.19.4</version>-->
<!--        </dependency>-->
<!--        <dependency>-->
<!--            <groupId>com.sun.jersey</groupId>-->
<!--            <artifactId>jersey-client</artifactId>-->
<!--            <version>1.19.4</version>-->
<!--        </dependency>-->
</dependencies>

2.2 Spring配置文件(.xml)

<?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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:p="http://www.springframework.org/schema/p" 
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd 
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--引入properties文件:被其他bean标签使用${key},也可以用于注解方式的依赖注入@Value("${key}")-->
    <context:property-placeholder location="classpath:config.properties" file-encoding="utf-8"/>

	<!--包扫描:使@Component等注解生效-->
	<context:component-scan base-package="xyz.aboluo" use-default-filters="false">  <!--use-default-filters:是否使用默认的过滤规则(通常不写)-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>  <!--除了@Controller注解不扫描,其它注解都扫描-->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>  <!--只扫描@Controller注解(要结合use-default-filters=”false”使用)-->
	</context:component-scan>

    <!--开启对"注解AOP"的支持-->
    <aop:aspectj-autoproxy/>

    <!--bean标签(对象创建):
        id:唯一标签
        class:创建对象对应类所在的全路径
        scope:singleton(默认)单例:创建的实例对象始终是同一个,作用范围是整个应用
                    单例对象生命周期:主配置文件一加载,容器创建后对象就被创建了(容器在对象就在,容器销毁对象就销毁)
              prototype多例:每次获取的实例对象都是新的
                    多例对象生命周期:使用时才会创建   长时间不使用,被java的”垃圾回收器GC”回收了(容器销毁了,多例对象不一定销毁)
        init-method:监听对象创建,实例对象被创建后调用init-method所指定的方法
        destroy-method:监听对象销毁,实例对象被销毁前调用destroy-method所指定的方法-->
    <bean id="user" class="xyz.aboluo.User">
        <!--property表示"set注入"
            name:set方法去掉set,首字母小写
            ref:引用其它bean类型(该bean必须已经被IOC管理)-->
        <property name="name" value="${aaa}"></property>
        <property name="age" ref="${bbb}"></property>
        <!--constructor-arg表示"注解注入"
            name:构造函数形参名-->
        <constructor-arg name="hobby" value="${ccc}"/>
    </bean>

	<!--spring-jdbc连接池(数据源)-->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${mysql.driver}"/>
		<property name="url" value="${mysql.url}"/>
		<property name="username" value="${mysql.username}"/>
		<property name="password" value="${mysql.password}"/>
	</bean>
	<!--阿里druid连接池(数据源)-->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
		<property name="driverClassName" value="${mysql.driver}"/>
		<property name="url" value="${mysql.url}"/>
		<property name="username" value="${mysql.username}"/>
		<property name="password" value="${mysql.password}"/>
	</bean>
	<!--c3p0连接池(数据源)-->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${mysql.driver}"/>
		<property name="jdbcUrl" value="${mysql.url}"/>
		<property name="user" value="${mysql.username}"/>
		<property name="password" value="${mysql.password}"/>
	</bean>
    <!--事务管理器-->
	<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"/>   <!--注入数据源-->
	</bean>
    <!--开启spring对"声明式事务"的注解支持-->
    <tx:annotation-driven transaction-manager="txManager"/>

    <!--引入其它xml配置文件-->
    <import resources="spring.xml"/>
</beans>

3 IOC

        底层核心原理是JAVA反射

        IOC(Inversion Of Control)控制反转(创建对象不再时通过new,而是交给IOC容器)

        Spring通过IOC容器来管理所有JAVA对象的实例化和初始化、控制对象与对象之间的依赖关系,这些由IOC容器管理的JAVA对象称为Spring Bean(它与由关键字new创建的JAVA对象没有任何区别)

3.1 IOC实现

3.1.1 ApplicationContext的主要实现类

        BeanFactory是IOC容器的基本实现,是Spring内部使用的接口,不向开发人员提供

        ApplicationContext是BeanFactory的子接口,提供了更多高级特性,面向开发者(几乎所有场合都可以使用ApplicationContext,而不是更底层的BeanFactory)

实现类简介
ClassPathXmlApplicationContext通过读取类路径下的xml配置文件创建IOC容器对象
AnnotationConfigApplicationContext通过读取配置类创建IOC容器对象
3.1.3.1 ClassPathXmlApplicationContext
@Test
public void userTest() {
	// 加载spring配置文件,创建"容器对象"
	ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
	// 从容器中获取对应的对象
	User user = context.getBean("user", User.class);
	// 使用对象
	user.aaa();
}
3.1.3.2 AnnotationConfigApplicationContext
@Test
public void userTest() {
	// 加载spring配置类,创建"容器对象"
	ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
	// 从容器中获取对应的对象
	User user = context.getBean("user", User.class);
	// 使用对象
	user.aaa();
}

3.2 依赖注入DI(Dependency Injection)

        在Spring创建对象过程中,注入对象依赖的属性:

                (1) set注入: 有空参构造方法,和对应的set方法

                (2) 构造注入: 有对应的构造方法

                (3) 注解注入: 有空参构造方法

3.3 注解开发

3.3.1 开启组件扫描

3.3.2 创建对象注解

        被注解的类必须有空参构造方法

        这些注解不能写在接口上,要写在类上

注解说明
@Component默认使用类名(首字母小写)
@Controller通常用于控制层,功能与@Component相同
@Service通常用于业务层,功能与@Component相同
@Repository通常用于数据访问层,功能与@Component相同

3.3.3 依赖注入的注解

注解说明
@Autowired

根据类型去IOC容器匹配类/类的子类/接口实现类

可以用在类或方法上

@Qualifier("名称")

要配合@Autowired使用

根据类型和名称去IOC容器进行匹配

@Value("值")或("${key}")

基本数据类型和String类型

不能用作静态变量(static),不能用作常量(final)

3.3.4 静态依赖注入

        @Autowired不能作用在静态成员上,但可以在类中先声明静态成员变量,然后用@Autowired作用在非静态set方法上来进行属性注入,间接达到"静态依赖注入"的效果

@Component
public class Common {
    /**
     * 静态声明
     */
    private static StringRedisTemplate stringRedisTemplate;

    @Autowired
    public void setStringRedisTemplate(StringRedisTemplate stringRedisTemplate) {
        Common.stringRedisTemplate = stringRedisTemplate;
    }
}

3.4 全注解开发

        用配置类来替代xml配置文件

注解

说明

@Import

用在Spring配置类上

可以引入配置类

也可以引入Controller,Service,POJO等类,被@Import引入的类可以不写@Component,@Service等注解,依然会被注册进SpringIOC容器

@Scope("singleton/prototype")

用于指定bean对象的作用范围(默认singleton)

可以不配合单独使用,该bean被@Import引入Spring配置类即可生效

可以配合@Component等注解,也可以配合@Bean注解

@Bean

将方法的返回值作为Bean交给SpringIOC容器管理

如果方法需要参数,会从IOC容器获取(默认按类型注入/多个匹配按形参名注入)

@Configuration  //配置类注解
@Import({DataSourceConfig.class,TransactionConfig.class})  //将类注册进SpringIOC容器 ; 引入其他配置类
@ComponentScan(value = "xyz.aboluo", excludeFilters = @ComponentScan.Filter(
        type = FilterType.ANNOTATION,  //按注解类型过滤(不扫描)
        classes = {Controller.class, Service.class}
), includeFilters = @ComponentScan.Filter(
        type = FilterType.ANNOTATION,  //按注解类型过滤(只扫描)
        classes = {Controller.class, Service.class}
))  //开启组件扫描(配置类也要在其中)
@PropertySource(value = "config.properties", encoding = "utf-8")  //引入properties文件
@EnableAspectJAutoProxy  //开启Spring对”注解AOP”的支持  //在SpringBoot中默认开启,当使用spring-boot-starter-web依赖时,会自动添加此注解
@EnableTransactionManagement  //开启Spring对”注解事务”的支持(需要有对应的"事务管理器"交给SpringIOC容器)   //在SpringBoot中默认开启
@MapperScan({"xyz.aboluo.dao","xyz.aboluo.dao2"})  //dao接口包扫描
@EnableWebMvc    //开启"json数据转换为对象"的功能,方法形参前加@RequestBody(一个方法只能使用1次)  //在SpringBoot中默认开启
public class SpringConfig {
    //事务管理器
    @Bean
    public DataSourceTransactionManager getDataSourceTransactionManager(DataSource dataSource) {
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(dataSource);
        return dataSourceTransactionManager;
    }

    //Spring整合Mybatis
    @Bean
    @Scope("prototype")
    public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource, ApplicationContext applicationContext) {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        //注入数据源
        sqlSessionFactoryBean.setDataSource(dataSource);
        //给某一包下的所有JavaBean起别名(类名就是别名,不区分大小写)
        sqlSessionFactoryBean.setTypeAliasesPackage("xyz.aboluo.pojo");
        //读取mybatis的主配置文件(非必读)
//        sqlSessionFactoryBean.setConfigLocation(applicationContext.getResource("classpath:mybatisMain.xml"));
        //读取mybatis的映射配置文件(非必读,只要保证xml和dao接口有相同的包路径并且同名即可,或者使用@Select等注解开发)
//        List<Resource> Resources = new ArrayList<>();
//        Resources.add(applicationContext.getResource("classpath:xyz/aboluo/dao/UserDao.xml"));
//        Resources.add(applicationContext.getResource("classpath:xyz/aboluo/dao/SudokuDao.xml"));
//        sqlSessionFactoryBean.setMapperLocations(Resources.toArray(new Resource[0]));
        return sqlSessionFactoryBean;
    }

    //配置dao层接口包扫描(可以用@MapperScan替代)
//    @Bean
//    public MapperScannerConfigurer getMapperScannerConfigurer() {
//        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
//        mapperScannerConfigurer.setBasePackage("xyz.aboluo.dao");
//        return mapperScannerConfigurer;
//    }
}

public class DataSourceConfig {
    @Value("${mysql.driver}")
    private String mysqlDriver;
    @Value("${mysql.url}")
    private String mysqlUrl;
    @Value("${mysql.username}")
    private String mysqlUsername;
    @Value("${mysql.password}")
    private String mysqlPassword;

    //数据源
    @Bean(name = "dataSource")
    public DriverManagerDataSource getDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(mysqlDriver);
        dataSource.setUrl(mysqlUrl);
        dataSource.setUsername(mysqlUsername);
        dataSource.setPassword(mysqlPassword);
        return dataSource;
    }
}
RK3576 USB3.0 DWC3控制器调试:PHY初始化失败排查指南 DWC3 是 Synopsys 公司推出的 USB3.0/3.1 控制器 IP,支持双角色(DRD)模式,可配置为 Host、Device 或 OTG。 阅读详情

相关推荐

CAPL实战:从零构建HEX文件解析器,赋能UDS刷写

本文详细介绍了如何使用CAPL从零构建HEX文件解析器,以支持UDS刷写操作。通过解析HEX文件格式、设计状态机、优化数据结构与算法,实现高效准确的固件数据处理,并提供了与UDS刷写流程对接的工程化实践建议。

weixin_28726391的博客 444

Spring3.1的IoC实例

Spring3.1的IoC实例

Jack Stomtion 124

告别手动复制粘贴!用R语言脚本批量抓取TCMSP中药靶点基因(附完整代码)

本文介绍如何使用R语言脚本自动化抓取TCMSP数据库中的中药靶点基因数据,告别手动复制粘贴的低效操作。通过详细的代码示例和参数设置,帮助研究人员快速获取并过滤符合药代动力学标准的中药成分及其靶点基因,大幅提升研究效率。特别适合生物信息学和中药现代化研究领域的从业者。

weixin_26950847的博客 266

Spring核心干货1 - 版本特性与IoC

1.Spring历史 Spring是于2003 年兴起的一个轻量级的Java 开源框架,由Rod Johnson 在其2002年的著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。 2.Spring各版本简介 Spring 1.x : 时代背景:SSH(Struts2+Spring+Hibernate)流...

yanqun007的博客 311

Scratch离线版部署指南:解决资源缺失与页面显示异常问题

本文提供了一份详尽的Scratch离线版部署指南,旨在解决网络依赖导致的资源缺失与页面显示异常问题。通过从基础文件获取、自动化资源抓取到生产环境部署的完整流程,帮助教育工作者和开发者在无网络环境下搭建功能完整的本地Scratch编辑器,确保编程教学的顺利进行。

wine的专栏 1263

基于STM32的家用新风系统智能控制器 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6核心控制器,完整实现了家用新风系统智能控制器的全功能开发,覆盖多传感器数据采集、双模式控制、PID调速、异常报警、掉电记忆等核心功能,全程采用保姆式无跳步教学,从硬件选型、接线、CubeMX配置、代码开发、调试排坑全流程拆解,跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 466

【老王读Spring IoC-1】Spring IoC之控制反转引入

IoC之控制反转引入前言版本约定正文准备工作正式开始总结 前言 上文提到: 要实现"控制反转"功能的话,我们需要解决 bean class 的扫描问题,只有将这些 bean class 扫描出来了,我们才知道要创建哪些 bean 的实例。 所以,Spring 首先要解决的问题是 BeanDefinition 的扫描和存储(即:BeanDefinition 的注册)。 版本约定 Spring 5.3.9 (通过 SpringBoot 2.5.3 间接引入的依赖) 正文 在研究 IoC 源码之前,我们需要大致了

老王的专栏 702

逆变器方案(工频全套)工频正弦波逆变器开发板全套设计资

逆变器方案(工频全套)工频正弦波逆变器开发板,24V-72V通用12只TO-247封装MOS管,额定输出功率6500W以下;配有触摸屏操作界面,运行数据一目了然,带市电互补UPS功能,可选择电池优先或市电有限工作,我们的开发板均从实战角度出发,让您的学习更便捷,包含全套设计资料,PCB.原理图.源代码,程序均有中文注释,MCU选用美国微芯公的PIC-8位单片机,民用数字电源首选单片机,抗干扰能力强,运行稳定。...

m0_73494033的博客 892

Spring IOC DefaultListableBeanFactory解析1

       Spring的核心所在就是IOC以及AOP。但是我认为最为重要的还是IOC。关于IOC的基本概念我不涉及,反正就是将对象以及以来的权力交给Spring容器来处理。通常我们Spring入门的时候都会创建一个Java Bean。然后配置文件去定义这个bean。之后使用ApplicationContext或者BeanFactory来获取这个Bean的对象。我首先定义了一个User: p...

大佛拈花的博客 322

记一次在JAVA中客户端使用axis调用webservice服务端出现的异常:Unmarshalling Error: For input string: ""

在使axis调用webservice服务端,参照网上给的demo: Call call = (Call) service.createCall(); call.setTargetEndpointAddress(endpoint);//设置服务请求路径 QName qn = new QName(name); call.setOperationName(qn); call.addParamet

kry1201的专栏 8081

MIPI D-PHY IP 使用说明(一)

目录 前言 一、IP 特点 二、IP 可用性 三、IP 总览 四、IP 声明 五、IP 结构 六、IP 分流桥 模式 七、端口描述 1、PPI 接口信号 1、常规 PPI控制信号 2、发送模式 时钟通道 高速 PPI 信号 3、发送模式 时钟通道 逃逸模式PPI 信号 4、发送模式 数据通道 高速 PPI 信号 5、发送模式 数据通道 控制接口PPI 信号 6、发送模式 ...

记录所学,分享知识,结识挚友 2505

实验1 Spring IoC中的Bean装配

实验1 Spring IoC中的Bean装配

派大星子的博客 2374

BGP路由聚合:自动聚合和手动聚合

路由聚合是指将多条具体的路由合并为一条聚合路由,以减少路由表的条目数。这种技术通过只向对等体发送聚合后的路由,而不发送所有的具体路由,来减小路由表的规模。同时,被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。

网络技术联盟站 1221

1、Spring——IOC、DI

文章目录第1章、Spring概述1、Spring简介2、Spring体系结构第2章、入门案例1、案例代码2、几个细节第3章、IOC和Bean的配置1、IOC和DI2、通过类型获取bean3、简单的Spring配置【1】别名配置【2】Bean配置【3】import配置4、给bean的属性赋值【1】赋值的途径【1.1】通过bean的setXxx()方法赋值【1.2】通过bean的构造器赋值【1.3】给bean的级联属性赋值【1.4】p名称空间【1.5】c命名空间注入(了解)【2】可以使用的值【2.1】字面量【2

HK_Milky的博客 1118

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

1、spring IOC基本使用

使用maven的方式来构建项目 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://

软软的铲屎官的博客 210

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring家族框架——Spring1——IOC及Spring的引出

🔥本篇概览:详细讲解了对Spring的IOC的引出以及自我理解。

做一个善良的人,做好自己的事,如果愿意,再发一份光。 1463

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spring-1对Spring的IoC和DI的理解

1、 认识 Spring 框架 Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (Inversion of Control,控制反转) 和 AOP(Aspect Oriented Programming,面向切面编程)。 1.1 什么是 Spring: Spring 是一个轻量级的 DI / IoC 和 AOP 容器的开源框架,来源于...

扮猪吃老虎二号的博客 404

1. Spring IOC 注解

1. Spring IOC 注解 1.1 装配Bean BeanFactory是所有IOC容器的父类,ApplicationContext也继承自BeanFactory public interface BeanFactory { //前缀 String FACTORY_BEAN_PREFIX = "&"; //以下多个获取bean的方法 Object ...

方大锤 378

Spring——Spring IOC(1)

程序的耦合,工厂模式的IOC解耦合,Spring的IOC解耦合

wan的博客 987

spring1 IOC

1spring的优点 Spring是一个开源的免费的框架(容器) Spring是一个轻量级的,非入侵式的框架 控制反转(IOC),面向切面编程(AOP) 支持事务的处理,对框架整合的支持! 方便解耦,简化开发 AOP编程的支持 声明式事务的支持(配置方式) 方便程序的测试 方便集成各种优秀框架 降低JavaEE API的使用难度 Java源码时经典学习范例 总结一句话:Spring是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的 2 核心一:IOC

qq_45954910的博客 188

Spring1(IOC)

Spring 是一个轻量级的,IOC 和 AOP 的一站式开发 java开发框架,为简化企业级应用开发而生的轻量级:1.Spring核心jar比较小。

2301_76628168的博客 1184

Spring 初识及IOC详解 D1

1、初识 Spring 1.1 简介 Spring框架即以interace21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版。 Rod Johnson, Spring Framework创始人,著名作者。很难想象Rod Johnson的学历,真的让很多人大吃一惊,他是悉尼大学的博士,然而他的专业不是计算机,而是音乐学。 Spring理念:使现有的技术更加容易使用,本身是一个大杂烩,整合了现有的技术框架! Github: https://github.com/spr

Targetu 未来可期 265

【java spring学习1】IOC理论,spring用DI实现IOC

狂神说java spring:让java 开发更容易 IOC:控制反转 AOP:面向切面编程(业务面) 2. spring组成和扩展 2.1spring 组成 2.4 拓展 学习路线: spring boot:构建一切 快速开发的脚手架 基于spring boot可以快速开发单个为服务 约定大于配置 学习这个,需要学习spring和spring MVC spring cloud springcloud基于boot spring的缺陷:发展太久之后,违背了原有理念,配置过于复杂–>所以

weixin_40485502的博客 806

【1】Spring概述、IoC理论推导

Spring 1、Spring概述 1.1、简介 Spring : 春天 —>给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架。 2004年3月24日,Spring框架以interface21框架为基础,经过重新设计,发布了1.0正式版。 很难想象Rod Johnson的学历 , 他是悉尼大学的博士,然而他的专业不是计算机,而是音乐学。 Spring理念 : 使现有技术更加实用 . 本身就是一个大杂烩 , 整合现有的框架技术 官网 : h

Kuber 151

【Spring】 1. IOC

文章目录【Spring】 1. IOC学习框架前的引言1. Spring 简介1.1 Spring 概述1.2 Spring 核心1.3 Spring 下载1.4 sts2. IOC2.1 原始方式2.2 IOC 底层原理2.3 BeanFactory 工厂类2.4 入门程序2.5 bean 的常用属性3. DI3.1 注入方式3.2 注入复杂属性3.3 命名空间注入3.4 SpEL 注入4. 基...

言午学堂 210

Spring IOC 1

Spring IOC1待建

luppy01的专栏 2231
上一篇: JAVA反射 (reflect)
下一篇: Spring (2) AOP
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值