学习Spring笔记三

【IxNetwork】史上最全IxNetwork测试仪使用精讲(一),图文教程超赞超详细!!! IXIA使用的是Server-client模式,Server端在测试仪表的主机上,在开机后会随着主机内的操作系统的启动而自动启动,一般情况下不需要人为的手工启动。因此在通常不需要为主机配置专用的显示器和键盘。client端包括两个测试软件: Ixia Explorer和ScriptMate。这两个软件一般安装在测试用计算机上,在仪表自带的主机中也有这两个软件。根据测试项目的不同来选择使用不同的软件。Ixia Explorer主要提供数据流的测试,针对设备的功能进行测试; 阅读详情

上一篇的HelloWorld简单实现了用AC容器(也就是IOC容器)来创建UserDao类。IOC和DI说的是一回事,只不过一个从宏观上描述 ,一个从细节上描述。IOC是一种将组件依赖关系的创建和管理置于程序外部的技术。这使得一个类是很独立的,不需要承担更多的责任。


Spring创建对象是在我们把这个对象类已经建好,并且按照这个类的结构,在ApplicationContext.xml中安排好。然后通过配置文件反射创建这个类的对象,并且协调管理对象和对象之间的关系!!


IOC容器帮我们完成了两件事

1.对象的创建

2.对象关系的建立(DI依赖注入)


在IOC中对象的创建分三种创建方式,注入也有三种方式


一

IOC中对象的创建

1.无参构造方式创建对象,就像HelloWorld实例中一样,只是简单的通过beans.xml反射出对象


2.有参构造方式创建对象,意思是说这个对象是有参数的,那么在通过beans.xml反射的时候,还需要描述这个bean(对象)的参数,实例如下

    实际的对象UserDao

    public class UserDao{

private Integer abc;   

private String ccc;

private boolean aa;


public UserDao(Integer abc,String ccc,boolean aa){//这个bean对象的带参构造器

super();

this.abc = abc;

this.ccc = ccc;

this.aa = aa;

System.out.println("IOC容器创建有参数的UserDao时,我将被初始化");

}


public UsreDao(){//这个bean对象的无参构造

System.out.println("IOC容器创建无参数的UserDao时,我会被初始化");

}


public void add(){

System.out.println("add.......");

}

    }


    beans.xml中做如下添加

<bean id="userDao"  class="com.bjsxt.dao.UserDao">

<constructor-arg index="0"  values="123" ></constructor-arg>   //constructor-arg说明这个bean带参数,多个参数由index来区别是第几个

<constructor-arg index=“1”  values="xiaogao"></constructor-arg>     //values是具体注入的值

<constructor-arg index="2"  values="true"></constructor-arg>   //第三个值是boolean型的

</bean>


     写一个Test方法来测试一下有没有初始化有参构造器

public class Test{

public static void main(String[ ]  args){

ApplicationContext ac = new ClassPathXmlApplicationContext(

new String[]{ "beans.xml"}

);

UserDao dao = (UserDao)ac.getBean("userDao");

dao.add();

}

}


3.工厂方式创建对象,IOC容器中的工厂是在beans.xml中把daoFactory反射出来,再由daoFactory来创建对象,而不是由容器来创建对象,这是因为有些时候,别人已经写 好了daoFactory,你不便再修改(人家通过daoFactory创建了不少对象,你难道再一一通过IOC创建出来吗,肯定没必要),所以要直接把daoFactory反射出来,让它以前怎么创建还怎么创建。


       工厂方式创建对象的实例

在beans.xml中重新定义一个bean,如下

<bean id="daoFactory"   class="com.bjsxt.dao.DaoFactory"></bean>      //把别人写好的daoFactory反射出来

<bean id="teacherDao"  factory-bean="daoFactory"  factory-method="newInstance"></bean>    //factory-bean写上面工厂bean的ID,说明这个bean是工厂new出来的,factory-method写daoFactory new出teacherDao后执行teacherDao中的哪个方法


别人写好的对象和工厂

public class TeacherDao{

public void add(){

System.out.println("teacher ..... add.....");

}

}
 

public class DaoFactory{

public TeacherDao newInstance(){

return new TeacherDao();

}

}


然后在Test.java中稍作改动

public class Test{

public static void main(String[ ] args ){

ApplicationContext ac = new ClassPathXmlApplicationContext(

new String[ ] {"beans.xml"}

);

TeacherDao dao = (TeacherDao) ac.getBean("teacherDao");  //这里不需要得到配置文件里的daoFactory,那只是告诉IOC容器daoFactory和TeacherDao的关系

dao.add();

}

}


——————IOC容器帮我们创建对象的三种方式end——————————————





二

IOC容器对象关系的建立方式(也就是注入方式)

1.setter注入(最常见)

建立一个action包,下面建立一个UserAction.java

public class UserAction{

private UserDao userDao;

public UserDao getUserDao(){

return userDao;

}

public void setUserDao(UserDao userDao){

this.userDao = userDao;

}

public String add(){

userDao.add();//这个userDao就是private UserDao userDao的那个,只要有set、get方法,这样就可以用了,不需要new,因为在beans.xml中已经分配好了userAction和userDao的关系,具体体现在这句:ref="userDao",struts2中也有这个功能。

return null;

}

}


UserDao.java

public class UserDao {
public void add(){
System.out.println("UserDao.add(add........)");
}
}


在beans.xml中加入两个bean(spring的配置文件叫ApplicationContext.xml最正宗,这里简写成beans.xml)

<bean id="userAction" class="com.bjsxt.action.UserAction">//反射出userAction

<property name="userDao" ref="userDao"></property>//这里是通过userDao找到userAction中的setUserDao(UserDao userDao)方法; 就是简单的set注入,默认调用set方法,在action中写上set方法就成了  。property就是userAction类中的参数的意思

</bean>

<bean id="userDao" class="com.bjsxt.dao.UserDao"></bean>//这个bean一定别丢,不然找不到userDao的对象会报错


Test.java

public class Test {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext(
new String[]{"ApplicationContext.xml"}
);

UserAction userAction = (UserAction) ac.getBean("userAction");
userAction.add();
}
}




2.构造器注入(和set注入不同的是不用创建set、get方法了,改创建构造器了,然后beans.xml配置文件中再改改写法,就这么简单)

public class UserAction{

private UserDao userDao;

public UserAction(UserDao userDao){//建了个有参构造

super();

this.userDao = userDao;

}

public String add(){

userDao.add();

return null;

}

}


在beans.xml中添加两个bean

<bean id="userAction"  class="com.bjsxt.action.UserAction">

<constructor-arg index="0" ref="userDao"></constructor-arg>

</bean>

<bean id="userDao" class="com.bjsxt.dao.UserDao"></bean>


Test.java中写

public class Test{

public static void main(String[ ]  args){

ApplicationContext  ac = new ClassPathXmlApplicationContext(

new String[ ] {"beans.xml"}

);

UserAction userAction = (UserAction)ac.getBean("userAction");

userAction.add();

}

}


重要提示:Spring环境下,服务类千万不要自己new,要从容器当中拿!!!!因为容器中的对象不单单是对象,还包含和其它对象的关系。Spring约束编程,改变一种编程习惯。



3.接口注入(了解)


Spring中的beans.xml也可以叫ApplicationContext.xml,这个是最规范的叫法,叫这名字,配置文件图标会变成小树叶。


———————————对象关系的建立(注入的建立)end———————————————————————


蓝牙学习笔记之HCI协议(一) 目录 协议浅述 HCI简介 HCI协议数据格式 HCI Command Packet HCI ACL Data Packet HCI Synchronous(SCO) Data Packet HCI Event Packet HCI命令和事件介绍 Inquiry command Write Local Name Command Read BD_ADDR Command H... 阅读详情

相关推荐

独立游戏开发者的新武器:实测腾讯混元3D自动绑骨,搭配Mixamo让角色动画制作效率翻倍

本文实测腾讯混元3D自动绑骨功能与Mixamo动画库的协同使用,显著提升独立游戏开发者的角色动画制作效率。通过解决卡通角色绑骨偏差、优化骨骼权重及动画状态机配置,使原本两周的流程缩短至三天,并分享Unity中的性能优化与版权合规要点。

weixin_42662605的博客 488

高度虚拟化,成就云数据中心

近期在处理分布式云数据中心建设项目中,查阅和翻看了不少华为、华三等厂家的资料,发现虚拟化应是促使云数据中心走向成熟应用的最大化变因,特此记录下来,并向大家分享虚拟化相关概念。 高度虚拟化在迅速地改变当前 IT 运营模式,它使得云数据中心内的虚拟化更加复杂,“一虚多”的模式(一台物理服务器抽象出多个虚拟系统)得到了扩展、“多虚一”(多个虚拟系统同时处理单项任务)和“多虚多”(多项业务在多个虚拟系统中运行)正在成为云数据中心主要环节。 可以试想一下,电子商务...

技术需要分享 3095

NV 英伟达2022数字芯片笔试题

作者:数字IC打工人 链接:【开卷】第27期 NV 英伟达2022数字芯片笔试题_笔经面经_牛客网 来源:牛客网 1、Single Choice: Given thefollowing FIFO and rules, how deep does the FIFO need to be to preventunderflow or overflow? RULES: clk_A=25MHz; clk_B=100MHz; en_B is periodically asserted: period.

weixin_44072819的博客 6386

Java中的容器

虚线框表示接口、实线框表示类

AcTarjan的博客 175

Js逆向抖音a_bogus --/* V 1.0.1.19-fix.01 */补环境

需要在addEventListener中补一个鼠标移动事件,不补这个环境,生成的值是假值,你拿去请求,响应200,但是没有数据,这个算是dy的最难发现的一个难点。dy这个,没有原形链检测,我只是习惯了这样补,对XMLHttpRequest进行重写,导出a_bogus.发现可以响应状态码200,而且可以获取数据,接着注释params中的a_bogus。在n.apply的下面插入上述代码,对a_bogus进行全局导出。如果没有,就多放几次断点,因为每个人的游览器不一样。必须触发至少一次鼠标事件,不触发不给过。

2302_76420666的博客 4201

基于KiCad的STM32最小系统设计实战案例(含PCB布线)

手把手带你用KiCad完成STM32最小系统设计,涵盖原理图绘制、封装匹配、规则约束设置及关键信号PCB布线技巧;全程基于开源EDA工具KiCad,强调实操细节与常见坑点规避。

weixin_42452483的博客 355

Spring Authorization Server 学习笔记(三)

Spring Authorization Server 的核心对象 RegisteredClientRepository 的使用

qq_36427638的博客 2204

第42章:AI代码生成的质量标准——何时用AI、何时自己写

> - AI代码生成的质量分级标准:可用、稳定、安全、优雅 > - 一个决策矩阵:什么场景适合用AI,什么场景必须人工编写 > - 如何评估AI生成的代码质量(复杂度、可读性、安全性) > - 实战对比:同一需求下AI生成代码 vs 人工编写代码 > - 团队落地:将质量标准集成到Code Review和CI流程 > - 我如何将团队AI代码接受率从70%提升到90%

sfishfly的博客 161

Spring 学习总结笔记【三、注解开发】

关于Spring使用注解以及使用Java配置类的开放方式介绍

qq_51938362的博客 1453

ARM功耗管理之功耗状态及功耗模式

思考:功耗状态?功耗模式?Core&Cluster&Device&SoC如何映射?

AI-安全-功耗 780

coredump文件的原理是啥

Core Dump(核心转储)是操作系统在程序崩溃(如段错误、非法指令等)时自动生成的一个文件,它包含了程序崩溃瞬间的。通过 core dump,开发者可以像“时间回溯”一样检查程序崩溃瞬间的状态,是调试复杂问题的利器!终止时,Linux 内核会生成 core 文件。不会生成 core dump,因为它们是“优雅终止”信号。这样 core 文件会直接压缩存储,节省磁盘空间。的文件(类似可执行文件),可以用。Core 文件本质上是一个。

二进制君 377

Spring学习笔记 三

JDBC框架 原生的JDBC使用很麻烦,需要开发者手动的打开链接,处理异常,关闭连接等等。 Spring JDBC对原生的JDBC进行了封装,由Spring JDBC去实现底层细节,开发者只关心 执行Sql和返回结果。 尽管如此,实际开发中仍然不会使用Spring JDBC,因为有更加优秀的持久层框架:MyBatis。 PersonDao持久层对象 @Data public class Perso...

程序员小潘 3259

1、语义数据建模:避免陷阱与突破困境

本文探讨了语义数据建模的兴起背景、核心概念、生命周期及常见挑战。从数据丰富型组织和AI开发者的需求出发,分析了语义建模的关键元素和质量维度,并深入讨论了建模过程中可能出现的陷阱与解决方案。文章还针对语义模型的演化、治理和战略组织问题提供了突破思路,旨在帮助数据从业者更好地理解和应用语义建模技术,以提升数据驱动应用的有效性。

c8d9e0f1的博客 119

Spring学习笔记三

spring学习过程所做的笔记,对aop的理解做了一个记录

Adobe_java的博客 208

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spring学习笔记(三)

第三次学习笔记总结了5点内容,分别是:bean之间的关系、 Spring 和 JSR 的 Annotaion 对比、Bean的初始化与销毁方法 三种配置方式、导入和混合配置、项目实战。 1.bean之间的关系 IOC容器中的Bean之前存在三种关系: 继承 依赖 引用 1.1继承 bean定义的继承:不同于Java中的继承,这里指的是配置上的继承...

qq_42922647的博客 321

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【Spring学习笔记三】

二十三种设计模式中的一种,属于结构型模式。它的作用就是通过提供一个代理类,让我们在调用目标方法的时候,不再是直接对目标方法进行调用,而是通过代理类间接调用。让不属于目标方法核心逻辑的代码从目标方法中剥离出来——解耦。调用目标方法时先调用代理对象的方法,减少对目标方法的调用和打扰,同时让附加功能能够集中在一起也有利于统一维护。

hongjianxiang的博客 192

OV9734 DATASHEET,完整规格书

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

spring学习笔记三

第一个spring程序 IOC的一种实现方式 创建一个pojo对象 public class Hello { private String str; public String getStr() { return str; } public void setStr(String str) { this.str = str; } @Override publ

yuyuyu_623的博客 130

Spring Boot实战学习笔记(三)

本文为学习Spring Boot实战的学习笔记,学习了一遍,但是好记性不如烂笔头,所以文章记录下来。图书购买地址为: https://item.jd.com/11894632.html.Spring Boot实战学习笔记1Spring Boot实战学习笔记2Spring Boot实战学习笔记3Spring Boot实战学习笔记4Spring Boot实战学习笔记51.Spring 基础2.Spri...

殘遛的博客 1004

Spring学习总结笔记三

Spring 是轻量级的开源框架。Spring 包含控制反转IoC(DI) 和 面向切面AOP的特性。 IoC 依赖注入或者控制反转,调用者不负责被调用者的实例创建工作,该创建工作由Spring框架中的容器来负责,创建后再注入调用者。由于Spring容器负责被调用者实例,实例创建后又负责将该实例注入调用者,因此称为依赖注入。被调用者的实例创建工作不再由调用者来创建而是由Spring容器来创建,控...

上官云霆的博客 651

Spring5学习笔记三

AOP 一、概念 1、什么是 AOP (1)面向切面编程(方面),利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得 业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 (2)通俗描述:不通过修改源代码方式,在主干功能里面添加新功能 (3)使用登录例子说明 AOP 二、底层原理 1、AOP 底层使用动态代理 有两种情况动态代理 第一种 有接口情况,使用 JDK 动态代理 创建接口实现类代理对象,增强类的方法 第二种 没有接口情况,使用 CGLIB 动态代理 创建子类的代理对

beaiyy的博客 180

Spring学习笔记——三、JdbcTemplate

文章目录第三部分 JdbcTemplateA. 使用方式一、配置数据源二、配置JdbcTemplate对象B. 增删改查(jdbcTemplateTest)一、增加数据二、删除数据三、修改数据四、查询操作1. 查询所有2. 查询一个3. 查询聚合函数的结果(或者取某一行某一列)C. 在DAO层使用jdbcTemplate(jdbcTemplateDaoTest)一、xml形式配置二、半注解形式配置...

ajacker的博客 353

Spring 学习笔记 三

第三章  IoC中的国际化(CVS版本:V002)从这一章开始,我将把实例的项目打开一个CVS版本,不知谁能提供一个FTP空间?3.1        前言标题准确来说应该是“使用Spring中的IoC功能来实现我们所开发项目系统的国际化”,国际化不是针对IoC的,而是针对你开发的整个系统。如果你使用过Eclipse的国际化,或者用过Eclipse的“外部化字符串”向导(Eclips

ckangtai的专栏 583

Spring 学习笔记(三)

Spring AOP概念和操作

csdn_muxin的博客 411
上一篇: 学习Spring笔记二
下一篇: 学习Spring笔记四
CodingAlarm
博客等级 码龄12年 28粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值