【SSM_Spring】学习笔记02

Spark入门:从零到能跑的实战教程 Spark 的强大在于它统一了大数据处理的多种场景,从批处理到流处理,从 SQL 到机器学习。对于初学者来说,理解 Spark 的核心理念——内存计算和分布式抽象,是最重要的一步。接着,学会用 PySpark 搭建环境,能读数据、能写 SQL,基本上就入门了。剩下的路,就是通过实战去加深理解。写到这里,相信你对 Spark 已经有了一个比较完整的认识。下一步,不妨自己动手写几个 PySpark 脚本,跑一跑日志数据,或者尝试用 Spark SQL 做一个统计。 阅读详情

一、Spring配置的一些小笔记

1、<bean>标签的属性:

           <bean name="user" class="com.dunka.bean.User" lazy-init="true">

a)  name 是一个名字,可以通过name到容器获取对象
            name 可以使用特殊字符、可以重复,但是实际开发中并不推荐
            其中 id和name 基本相同,但不能使用特殊字符亦不能重复 

b)class 是被管理对象的全包名,spring根据全包名创建对象

c)延迟加载lazy-init true 就是创建容器时不加载配置的bean对象,在获取的时候才创建 

      ***ApplicationContext配置的所有bean都会在容器创建的时候被创建出来,而且都是以空参构造方法为默认方法。

d)scope="singleton" 单例模式 容器只创建一个对象,每次向容器请求分配对象,都是同一个对象 

   scope="prototype"多例模式 容器在每次请求都会创建新的对象,所以每次getBean都是新的对象。

   scope="request" 在web环境下,如果这个对象属性scope为request被创建出来,其生命周期会与request的一致,请求结束则die

   scope="session"同理,与session的生命周期一致

e)init-method:初始化方法,在对象创建之后调用的初始化方法,单例、多例适用

f)destory-method:销毁方法,在容器关闭的使用,acontext.close(),之后调用这个方法。但有一点要注意的是,scope="prototype"时,对象由容器交由我们自己管理,所以在关闭容器的时候,并不会调用这个方法。

2、属性注入

a)SET方法

值属性注入

	<bean name="user" class="com.dunka.bean.User">
		<!-- 属性注入 SET方法 -->
		<property name="u_id" value="1"/>
		<property name="u_username" value="隔壁老杨"/>
		<property name="u_password" value="123456"/>
	</bean>

  引用对象注入

public class User {
	private Integer u_id;
	private String u_username;
	private String u_password;
	private Pet u_pet;
}
public class Pet {
	private String petType;
	private String color;
}
<bean name="user" class="com.dunka.bean.User">
		<!-- 属性注入 SET方法 -->
		<property name="u_id" value="1"/>
		<property name="u_username" value="隔壁老杨"/>
		<property name="u_password" value="123456"/>
		<!-- 属性注入 引用对象注入 -->
		<property name="u_pet" ref="dog"/>
	</bean>
	
	<!-- 将Pet交由Spring容器管理 被引用对象-->
	<bean name="dog" class="com.dunka.bean.Pet">
		<property name="petType" value="柴犬"/>
		<property name="color" value="黄色"/>
	</bean>

b)构造方法注入

name是指构造方法中的相对应的参数名,value是值类型的注入、ref是引用对象类型的注入、type用于指定参数类型,index用于指定参数的位置(从0开始)

public User(String u_username, Pet u_pet) {
		System.out.println("方法1 String ,Pet");
		this.u_username = u_username;
		this.u_pet = u_pet;
	}

	public User(Integer u_username, Pet u_pet) {
		System.out.println("方法2 Integer ,Pet");
		this.u_username = u_username.toString();
		this.u_pet = u_pet;
	}
	
	public User(Pet u_pet,Integer u_username) {
		System.out.println("方法3 Pet ,Integer");
		this.u_username = u_username.toString();
		this.u_pet = u_pet;
	}




<bean name="user1" class="com.dunka.bean.User">
		<constructor-arg name="u_username" value="666" type="java.lang.Integer" 
             index="0" />
		<constructor-arg name="u_pet" ref="dog" index="1"/>
	</bean>

c)复杂类型注入:array\list\set\map\properties

 复杂类型实体类:

public class MyCollection {
	//数组
	private Object[] array;
	//list
	private List list;
	//set
	private Set set;
	//map
	private Map map;
	//Properties
	private Properties pro;
}

在applicationContext_injection.xml中加入的bean标签:可以注意到的是在每一种类型的赋值里,都可以用<ref bean="dog"/>引用之前的bean,以达到值复用的效果,无须重复赋值

<!-- 复杂类型注入 -->
	<bean name="collection" class="com.dunka.bean.MyCollection">
		<!-- array数组 -->
		<property name="array" >
			<array>
				<value>123</value>
				<value>abc</value>
				<ref bean="dog"/>
			</array>
		</property>
		<!-- list -->
		<property name="list">
			<list>
				<value>456</value>
				<value>jdj</value>
				<ref bean="user1"/>
			</list>
		</property>
		<!-- set -->
		<property name="set">
			<set>
				<value>999</value>
				<value>dunka</value>
				<ref bean="dog"/>
			</set>
		</property>
		<!-- map -->
		<property name="map">
			<map>
			 	<entry key="username" value="dddd"/>
			 	<entry key="password" value="123"/>
			 	<entry key-ref="user1" value="dog"/>
			</map>	
		</property>
		<!-- properties -->
		<property name="pro">
			<props>
				<prop key="name">老杨</prop>
				<prop key="user1">dog</prop>
			</props>
		</property>
	</bean>

测试类 

	@Test
	public void test_injection1() {
		
		ClassPathXmlApplicationContext aContext = new ClassPathXmlApplicationContext("applicationContext_injection.xml");
		MyCollection mC = (MyCollection) aContext.getBean("collection");
		System.out.println(mC);
	}

由于没有使用过properties,所以我上网找了一篇文章专门说java.util.properties的,说的很详细,稍微明白这个类型是做什么的。如果以后会用到,便于回顾:https://www.cnblogs.com/bakari/p/3562244.html

二、注解配置

(1)将对象注册到容器

a)导入aop包,添加context的约束

并开启组件扫描,以下例子重点说明实体类的注解

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	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-4.3.xsd">
	
	<!-- 开启组件扫描  base-package 扫描该包以及其子包下的所有注解 -->
	<context:component-scan base-package="com.dunka.bean"/>

</beans>

b)建立一个User2实体类


//<bean name="user" class="com.dunka.bean.User">
@Component("user")
//@Controller("user") 	 //对应web层
//@Service("user")		 //对应Service层
//@Repository("user")    //对应DAO层
//@Scope(scopeName="prototype")
public class User2 {
	
	@Value(value="1")//在字段上使用此注解是暴力反射下的结果,不推荐
	private Integer u_id;
	private String u_username;
	private String u_password;
	private Pet u_pet;
	
	public User2() {
		System.out.println("User2空构造方法");
	}
	

	public Integer getU_id() {
		return u_id;
	}
	public void setU_id(Integer u_id) {
		this.u_id = u_id;
	}
	public String getU_username() {
		return u_username;
	}
	@Value("Dunka") //直接在SET方法上注入
	public void setU_username(String u_username) {
		this.u_username = u_username;
	}
	public String getU_password() {
		return u_password;
	}
	public void setU_password(String u_password) {
		this.u_password = u_password;
	}
	
	public Pet getU_pet() {
		return u_pet;
	}
	//自动装配,在容器中只有一个对象的时候适用
//	@Autowired
	//手动装配,容器中有多个同类型对象
	@Resource(name="dog")
	public void setU_pet(Pet u_et) {
		this.u_pet = u_et;
	}
	
	
	@Override
	public String toString() {
		return "User [u_id=" + u_id + ", u_username=" + u_username + ", u_password=" + u_password + ", u_et=" + u_pet
				+ "]";
	}
	//在构造方法后调用
	@PostConstruct
	public void userInit() {
		System.out.println("userInit");
	}
	//在销毁之前调用
	@PreDestroy
	public void userDestory() {
		System.out.println("userDestory");
	}
}

这里解释一下各个注解:

(1)在XML文件中配置这个<bean name="user" class="com.dunka.bean.User">标签,相对应以下的@Component\@Controller\@Service\@Repository四个注解,在实际开发应用中比较少使用到@Component,其他三个标签使用在对应的层开发中,会更清晰并且易读懂
@Component("user")
@Controller("user")      //对应web层
@Service("user")         //对应Service层
@Repository("user")    //对应DAO层

 

@Scope(scopeName="prototype")这个注解是对应<bean>中的scope属性,在没有注解的情况下默认是单例模式,可以通过注解中的属性更改创建对象的模式。

@PostConstruct 在构造方法后调用

@PreDestroy 在销毁之前调用

对于简单的属性注入:可在字段上、SET方法上使用

@Value(value="1")//在字段上使用此注解是暴力反射下的结果,不推荐

@Value("Dunka") //直接在SET方法上注入

对于对象的引用注入:

 @Autowired 自动装配,在容器中只有一个对象的时候适用
 @Resource(name="dog") 手动装配,容器中有多个同类型对象
    
c)测试类

@Test
	public void test_injection1() {
		ClassPathXmlApplicationContext aContext = new ClassPathXmlApplicationContext("applicationContext_annotation.xml");
		User2 user2 = (User2) aContext.getBean("user");
		User2 user3 = (User2) aContext.getBean("user");
		System.out.println(user2 == user3);
		aContext.close();
	}
@Test
	public void test_injection2() {
		ClassPathXmlApplicationContext aContext = new ClassPathXmlApplicationContext("applicationContext_annotation.xml");
		User2 user2 = (User2) aContext.getBean("user");
		System.out.println(user2);
	
	}

(2)Spring_JUnit框架整合

a)导入test包

利用之前的实体类,写一个测试

@RunWith(SpringJUnit4ClassRunner.class) //使用junit进行测试,帮助我们创建容器
@ContextConfiguration("classpath:applicationContext_injection.xml") //读取配置文件
public class test_SpringUnit {

	@Resource(name = "dog")
    private Pet pet;
	@Test
	public void test_injection() {
		System.out.println(pet);
	}
	
}

其中的注解说明:

@RunWith(SpringJUnit4ClassRunner.class)  使用junit进行测试,帮助我们创建spring容器
@ContextConfiguration("classpath:applicationContext_injection.xml") 读取配置文件

(3)分包配置问题:一个项目中可能会有很多配置文件,这时候需要有一个主配置文件,集中扫描该配置文件,将其他会引用到的配置文件导入其中,用到<import>标签

<!-- 导入其他配置文件 -->
	<import resource="/applicationContext_injection.xml"/>

测试时:@ContextConfiguration中读取的是主配置文件的路径

【以太网硬件九】1000base-X是什么? 简要描述1000base-X物理层规范 阅读详情

相关推荐

STRING数据库的蛋白质相互作用(PPI)网络分析

在转录调控相关的文献中,我们经常能够看到这样的蛋白质相互作用网络(protein protein interaction network,PPI network)。具体而言,这些相关的文献中首先通过RNA-seq、表达谱芯片或者蛋白质组分析等,找到了在不同分组样本间一系列的差异表达基因或蛋白。

weixin_43029125的博客 9454

SSM框架学习笔记02 | Spring整合Mybatis、Spring整合JUnit

SSM框架学习笔记02 | Spring整合Mybatis、Spring整合JUnit

qq_41929830的博客 1185

基于STM32 FOC下桥三电阻采样方式的电机相电流重构方法

如何提高三电阻采样的调制率

wanrenqi的博客 9196

SSM学习笔记(Spring篇 Day02)

① 删除原XML配置② Dao上添加注解在BookDaoImpl类上添加@Component注解@Component注解不可以添加在接口上,因为接口是无法创建对象的。③ 配置Spring的注解包扫描为了让Spring框架能够扫描到写在类上的注解,需要在配置文件上进行包扫描</beans>component:组件,Spring将管理的bean视作自己的一个组件scan:扫描base-package指定Spring框架扫描的包路径,它会扫描指定包及其子包中的所有类上的注解。

2302_79807388的博客 675

总结所有的池化(Pooling)方法

为什么池化? 池化(Pooling)层和卷积层、全连接层一样,都是卷积神经网络的组成部分。 卷积神经网络中的卷积层会将卷积Filter应用于输入图像,以便创建特征映射来总结输入中这些特征的存在。 卷积层被证明是非常有效的,在深层模型中叠加卷积层可以让接近输入的层学习低层特征(如线条),在模型中更深(高)的层用于学习高阶或者更抽象的特征,如形状或特定对象。 卷积层特征映射输入的一个局限性是它们只能精确记录特征在输入层的位置。这意味着在输入图像中特征位置的小幅移动将导致不同的特征映射。这可以随着重新裁剪

大脸猫的博客 1万+

手把手教你用P-MOS管搭建双电源自动切换电路(含AO3401选型指南)

本文提供了一份基于P-MOS管AO3401构建高可靠双电源自动切换电路的实战指南。文章详细对比了继电器、理想二极管与MOS管方案的优劣,深入解析了AO3401的关键参数选型,并手把手指导了从原理图设计、PCB布局到上电调试的全过程,旨在帮助硬件工程师和创客以极低成本实现无缝、高效的电源冗余方案。

moss5的博客 1234

SSM学习笔记(2)_Spring_Day02_Spring中基于注解的IOC和ioc的案例

Day02 本文章基于B站视频教程 《最新(idea版) mybatis-spring-springmvc-Java一站式学习》进行整理记录,本文章仅用于个人笔记/学习/交流使用。 目录标题Day021.Spring中ioc的常用注解1.1 用于创建对象的1.2 用于注入数据的1.3 用于改变作用范围的1.4 和生命周期相关 (了解)2.基于XML的IOC案例2.1 前期准备工作2.2 执行单元测试2.3 修改为基于注解的IOC3.Spring的新注解3.1 基本概念3.2 实际应用 spring第二天:s

耿鬼不会笑的博客 267

开关电源三大基本拓扑:反激、正激与桥式选型本质

开关电源拓扑是电力电子系统设计的核心基础概念,其本质决定能量传递路径、器件应力分布与系统物理边界。反激拓扑以耦合电感形式实现隔离与升降压,适用于小功率AC-DC场景;正激拓扑依赖实时能量传递与强制复位机制,支撑中功率高效率需求;桥式拓扑(含推挽/半桥/全桥)通过电压应力分摊与双向磁化,成为大功率系统的刚性选择。理解三者在磁芯工作模式、电流连续性、直流偏磁抑制等方面的原理差异,直接关系到效率、温升、EMI及可靠性等关键技术指标。本文聚焦反激、正激、桥式三大工程级基本拓扑的物理本质与落地约束,揭示从需求参数到电

cqwmy840702的博客 376

学习笔记_J2EE_SSM_02_spring+springMVC+Mybatis整合_注解示例

spring+springMVC+Mybatis整合_注解(声明式)示例 1.概述   spring+springMVC+Mybatis整合 注解(声明)配置方式 基于偷懒对重复的代码采取复制粘贴,对xml配置略作更改,但改变项目为maven支撑。   1.1 测试环境说明      名称 版本 备注 操作系统 windows 10 专...

weixin_30455067的博客 206

基于YOLOv10的机器人抓取引导系统:从物体检测到精准抓取

python# 数据标注工具简化版import os"""启动标注工具""""""标注单张图像"""print(f"标注图像: {os.path.basename(img_path)}")print("请在图像上绘制抓取矩形框...")# 这里应该实现交互式标注界面# 简化版本直接返回示例标注# 示例标注数据"""保存标注结果"""# 保存为YOLO格式# 转换为YOLO格式。

YOLO 378

Win7 x64位系统下几乎完美使用安装RTX3050 6G显卡驱动详细教程

RTX3050 6G显卡驱动安装指南:由于该显卡发布时间晚于驱动,需手动修改安装文件。首先在NVIDIA官网下载驱动并解压,通过设备管理器获取硬件ID(PCI\VEN_10DE&DEV_2584),然后在解压目录的.inf文件中添加对应的设备标识。安装完成后可能出现设备管理器感叹号问题,推荐通过命令提示符启用测试模式(bcdedit /set testsigning on)解决,此方法无需每次启动按F8,但会显示测试模式水印。文中提供了详细的图文操作步骤和两种解决方案。

m0_67194883的博客 2889

spring boot和SSM开发中有什么区别?

回答:spring boot是什么?有什么作用?什么场景下使用? SSM是什么?有什么作用?什么场景下使用? 两个相比较,各自的优缺点 什么是Spring Boot? 从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置。 SpringBoot的作用? 它使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让...

Java小萧博客 6万+

X86/64架构中的总线 和 ARM架构中总线的理解

内部总线 /CPU总线/FSB前端总线:类似ARM架构中的AHB总线北桥? 直接和CPU连接,这条总线主要由CPU使用,用来与高速缓存、主存和北桥(或MCH)之间传送信息。 外部总线:类似ARM架构中的APB总线(外围总线)南桥?例如PCI总线、USB总线等 通过北桥与CPU连接(南桥?),是CPU与内存RAM、ROM和输入/输出设备接口之间进行通讯的通路 内存总线:内存与北桥间的总线称为内存总线 ...

a746742897的博客 1067

【SSM】Spring学习笔记1: IoC的XML配置

文章基于。

2301_76391858的博客 1219

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Spring Boot整合SSM

Spring Boot可以帮助我们快速的搭建一个SSM框架,那建立spring boot项目之后怎样和SSM整合呢? 1.新建Model时,选择项目需要的核心依赖包 2.新建项目,建立相关对应的核心包,下图是成功之后的项目结构图 Students.java package com.ssm.springboot02.model; /** * @author 小思 * @PackageNa...

小思的博客 6848

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【SSM整合】SSM整合学习-2022详细学习笔记

学习尚硅谷2022版SSM教程的详细学习笔记 SpringMVC和Spring可以整合也可以不整合,不整合就是Spring和SpringMVC用同一个IOC容器,整合就是各自创建IOC容器去管理自己的。SpringMVC的IOC容器是在DispatcherServlet进行初始化的时候创建的,那么Spring的IOC容器应该在什么时候创建呢?SpringMVC管理的是控制层组件,而其他的需要交给Spring管理,而controller需要自动装配service层.........

gdxdekx的博客 4708

Spring Securit学习笔记之整合SSM

文章目录Spring Securit学习笔记1. Spring Security+SSM环境整合1. 创建maven项目,配置pom.xml2. 创建Spring核心配置文件Spring-core.xml3. 创建数据源配置文件jdbc-data.properties4. 创建SpringMVC配置文件spring-mvc.xml5. 创建Spring Security配置文件spring-sec...

IT小浣熊的博客 379

ssm框架学习笔记

title: ssm框架学习笔记 date: 2018-03-21 16:49:52 updated: 2020-03-12 14:34:23 categories: spring tags: - spring 此文档记录研二学习ssm框架的知识点笔记 SSM简介 最初:jsp + servlet + jdbc 现在:springmvc + spring + mybatis 官网地址: lo...

Pop_Rain的博客 2238

黑马SSM学习笔记

Spring ,SpringMVC ,MyBatis-Plus

十二间记,知不足而奋斗,望远山而前行。千里不辞行路远,时光早晚到天涯。 2130

基于spring的ssm整合

基于spirng框架的ssm整合,使用spring6整合mybatis框架,springmvc框架,spring框架。含代码,配置,运行结果。

. 2025

基于SSM的学习笔记分享系统

本设计以MySQL为后端数据库,以IDEA为开发平台,采用SSM架构,建立以个人中心,用户管理,笔记本管理,笔记分享管理,分享类型管理,学习资料管理,购买资料管理,完整资料管理,系统管理等必要功能的、稳定的学习笔记系统。

namixuezhang11的博客 420

javaweb,ssm,spring,SpringBoot的区别

​​传统JavaWeb技术​SSM替代方案​核心改进​Servlet注解驱动、解耦请求处理与视图渲染JSP 模板引擎(Thymeleaf等)前后端分离,避免Java代码侵入HTMLJDBCMyBatisSQL与Java解耦、自动ORM映射、动态SQL支持手工管理Service/DAOSpring IoC/AOP 依赖注入降低耦合、声明式事务管理EJBSpring轻量级容器简化分布式开发,避免重量级部署。

xrkhy的博客 1278

【SSM】Spring学习笔记5:Spring事务

保证数据层或者业务层对数据库操作的时候,所有操作同时成功或者同时失败。即保证数据一致性。

2301_76391858的博客 690

【SSM】Spring学习笔记2:注解配置bean

传统bean的定义方式是在配置文件applicationContext.xml文件中进行,如下这句代码的意思是将类“org.example.dao.impl.BookDaoImpl”配置成一个id为“bookDao”的bean。注解式开发将不再使用这种bean的配置方式,而使用Spring提供的注解@Component。将@Component标记在要配置为bean的类上,在applicationContext.xml中声明扫描某个包下面的含有@Component注解的类,即可完成bean的配置。

2301_76391858的博客 1326

Spring,SpringMVC,ssm的区别

概念: Spring Spring是一个开源容器框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系。其核心就是控制反转(IOC),和面向切面(AOP),简单的说就是一个分层的轻量级开源框架。 SpringMVC Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。 1、MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。是将业务逻辑、数

qq_43649799的博客 8507

【SSM】Spring学习笔记4:Spring的AOP编程

定义一个类,类中定义一个方法,该方法的方法体就是额外执行的操作。这个类需要加上@Component注解以配置成一个为Spring管理的bean;加上@Aspect注解将这个类标记为进行AOP操作配置的类。@Component //通知类必须配置成Spring管理的bean@Aspect //设置当前类为切面类类。

2301_76391858的博客 927

SSM【Spring day02】

Spring 第二天第1章 案例:使用spring 的 IoC 的实现账户的CRUD1.1需求和技术要求1.1.1需求1.1.2技术要求1.2环境搭建1.2.1拷贝 jar 包1.2.2创建数据库和编写实体类1.2.3编写持久层代码1.2.4编写业务层代码1.2.5创建并编写配置文件1.3配置步骤1.3.1 配置对象1.4测试案例1.4.1测试类代码1.4.2分析测试了中的问题第2章 基于注解的 IOC 配置2.1明确:写在最前2.2环境搭建2.2.1第一步:拷贝必备 jar 包到工程的 lib 目录。2.

hu_zhi_chao的博客 806
上一篇: 【SSM_Spring】学习笔记01
下一篇: 【SSM_Spring】学习笔记03
多啦CCCC梦
博客等级 码龄10年 31粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多啦CCCC梦

你的鼓励将是我最大的创作动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值