Spring IoC与AOP详解

Spring:IOC与AOP 目录一、Spring简介1、Spring2.spring优势​编辑二、IOC1.概念和原理 2.自定义IOC容器1.需求2.实现3.Spring相关的API3.1 图解​编辑 3.2.BeanFactory 接口4、Spring相关配置文件和操作4.1 Bean标签基本配置4.2 Bean标签配置范围4.3 Bean生命周期配置4.4 Bean实例化三种方式4.5 无参构造方法实例化4.6 工厂静态方法实例化4.7 工厂普通方法实例化4.8 Bean依赖注入概述4.9 有参构造方法注入(一个是userdao 阅读详情

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

🌾阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云

IoC容器核心依赖注入实现模式

Spring框架的IoC容器是其核心组件,它通过依赖注入(DI)模式实现对象的创建和组装。以下是对依赖注入实现模式的详细技术实现细节:

1. 构造器注入

构造器注入通过在类的构造函数中直接注入依赖对象。这种方式在对象创建时即完成依赖绑定,确保了对象在运行时不需要额外的依赖设置。

  • 技术细节:Spring通过反射解析类定义,调用无参构造器创建对象实例,然后根据构造函数参数类型和名称,查找对应的Bean并注入。

2. Setter注入

Setter注入通过调用对象的setter方法来注入依赖。这种方式的灵活性较高,允许在对象创建后动态添加依赖。

  • 技术细节:Spring通过反射查找类的setter方法,并根据方法名称和参数类型找到对应的Bean,然后通过反射调用setter方法进行注入。

3. 字段注入

字段注入通过在类字段上添加注解(如@Autowired),由Spring自动完成依赖注入。

  • 技术细节:Spring通过反射查找带有@Autowired注解的字段,并查找对应的Bean进行注入。注入过程可以是按类型或按名称进行。

4. 方法注入

方法注入通过在对象的方法中注入依赖对象,适用于特定场景,如根据方法参数注入不同依赖。

  • 技术细节:Spring通过反射查找带有特定注解的方法,并根据方法参数类型和名称找到对应的Bean进行注入。

5. 组件扫描机制

组件扫描是Spring自动发现和注册Bean的能力。

  • 技术细节:Spring通过解析配置文件或使用注解(如@Component)来指定扫描的包路径,然后扫描指定包下的类,并将它们注册为Bean。

6. Bean作用域

Spring支持多种Bean作用域,如Singleton(单例)和Prototype(原型)。

  • 技术细节:Singleton作用域下,Spring容器中只有一个Bean实例;Prototype作用域下,每次获取Bean时都会创建一个新的实例。

7. 条件化配置(@Conditional)

条件化配置允许根据特定条件创建Bean。

  • 技术细节:Spring通过@Conditional注解实现条件化配置,可以基于类路径、环境属性、注解存在等多种条件来决定是否创建Bean。

AOP技术体系

AOP通过将横切关注点从业务逻辑中分离,提高了代码的可维护性和可扩展性。

1. 代理模式实现

AOP的实现依赖于代理模式,包括JDK动态代理和CGLIB代理。

  • 技术细节:JDK动态代理适用于实现了接口的类,通过创建接口的代理实现来增强方法;CGLIB代理适用于没有实现接口的类,通过动态生成子类来实现代理。

2. 切点表达式语法

切点表达式用于定义哪些方法将被增强。

  • 技术细节:Spring AOP使用表达式语言(如execution、within、this等)来定义切点,这些表达式可以精确地指定要增强的方法。

3. 通知类型

通知是AOP中的核心概念,表示在切点执行前后执行的代码片段。

  • 技术细节:Spring提供了前置通知、后置通知、环绕通知、异常通知和最终通知等多种通知类型,它们分别在方法执行的不同阶段插入代码。

4. AOP应用场景

AOP在Spring中的应用场景广泛,如日志管理、事务管理、安全控制等。

  • 技术细节:通过定义切点和通知,可以将日志记录、事务管理、安全验证等横切关注点与业务逻辑分离,从而简化代码结构。

数据持久化

Spring框架提供了多种数据访问技术,如JDBC、ORM、JPA等。

1. JDBC模板

JDBC模板简化了JDBC编程,通过封装JDBC操作来提高开发效率。

  • 技术细节:Spring JDBC模板提供了JdbcTemplate类,它封装了JDBC操作,如查询、更新、删除等,简化了数据库操作代码。

2. 事务管理

Spring支持声明式事务和编程式事务。

  • 技术细节:声明式事务通过在配置文件或注解中定义事务边界来实现;编程式事务需要手动编写事务代码,如使用TransactionTemplate。

3. ORM集成

Spring支持多种ORM框架,如Hibernate、MyBatis等。

  • 技术细节:Spring通过LocalContainerEntityManagerFactoryBean和EntityManagerFactory接口与ORM框架集成,提供统一的ORM操作接口。

4. 会话管理

会话管理是ORM框架的一个重要特性,负责管理数据库会话、事务等。

  • 技术细节:Spring通过EntityManager和Session接口提供会话管理,支持事务管理、持久化操作等。

5. JPA规范实现

JPA是一种规范,Spring Data JPA是基于JPA规范的框架。

  • 技术细节:Spring Data JPA通过定义接口和实现类,实现了JPA规范中的持久化操作,如CRUD、分页、排序等。

6. 多数据源配置

在Spring中,可以配置多个数据源,并实现数据源切换。

  • 技术细节:Spring通过AbstractRoutingDataSource类实现数据源路由,根据特定的条件选择合适的数据源进行操作。

Web开发体系

Spring提供了强大的Web开发体系,包括MVC架构、RESTful支持、异常处理机制等。

1. MVC架构

MVC(Model-View-Controller)是一种经典的软件架构模式,它将业务逻辑、数据模型和用户界面分离。

  • 技术细节:Spring MVC通过DispatcherServlet来处理HTTP请求,将请求映射到相应的控制器,控制器负责处理业务逻辑,并返回视图或数据。

2. 组件

Spring MVC中的组件包括控制器、视图解析器、数据绑定等。

  • 技术细节:控制器负责处理请求,视图解析器负责解析视图,数据绑定负责将模型数据绑定到视图。

3. RESTful支持

RESTful是一种网络架构风格,Spring MVC支持RESTful风格的开发。

  • 技术细节:Spring MVC通过使用@RestController注解和相应的请求映射方法来支持RESTful风格的开发。

4. 异常处理机制

Spring MVC提供了强大的异常处理机制。

  • 技术细节:Spring MVC通过定义异常处理器类,并在配置文件中指定异常处理规则,来处理不同类型的异常。

5. 文件上传下载

Spring MVC支持文件上传下载功能。

  • 技术细节:Spring MVC通过MultipartResolver接口来处理文件上传,通过HttpServletResponse和HttpServletRequest来处理文件下载。

安全框架

Spring安全框架提供了强大的认证和授权功能。

1. 认证流程

Spring安全框架提供了多种认证机制。

  • 技术细节:Spring安全框架通过AuthenticationManager接口来管理认证过程,支持多种认证方式,如基于用户名密码、基于令牌等。

2. 授权模型

Spring安全框架支持基于角色的授权模型。

  • 技术细节:Spring安全框架通过AccessDecisionManager接口来管理授权过程,支持基于角色的访问控制。

3. CSRF防护

Spring安全框架提供了CSRF防护机制。

  • 技术细节:Spring安全框架通过生成CSRF令牌并验证来防止CSRF攻击。

4. OAuth2集成

Spring安全框架支持OAuth2集成。

  • 技术细节:Spring安全框架通过OAuth2RestTemplate类和OAuth2Authentication接口来支持OAuth2认证。

5. 方法级安全

Spring安全框架支持方法级安全。

  • 技术细节:Spring安全框架通过@PreAuthorize、@PostAuthorize等注解来控制方法对资源的访问权限。

高级特性

Spring框架提供了许多高级特性,如事件发布/监听机制、SpEL表达式、响应式编程、测试框架集成、缓存抽象等。

1. 事件发布/监听机制

Spring事件机制允许对象发布事件,其他对象可以订阅这些事件并做出相应处理。

  • 技术细节:Spring通过ApplicationEvent类定义事件,通过ApplicationListener接口定义事件监听器,通过ApplicationEventPublisher接口发布事件。

2. SpEL表达式

SpEL(Spring Expression Language)是一种类似于EL的表达式语言。

  • 技术细节:SpEL表达式可以用于动态获取对象的属性、调用方法、执行条件判断等。

3. 响应式编程(WebFlux)

Spring WebFlux是基于响应式编程的框架。

  • 技术细节:Spring WebFlux使用Reactor库实现异步非阻塞的Web应用,适用于高并发场景。

4. 测试框架集成

Spring框架支持多种测试框架,如JUnit、TestNG等。

  • 技术细节:Spring提供了@SpringBootTest、@DataJpaTest等注解,方便进行集成测试和单元测试。

5. 缓存抽象

Spring提供了缓存抽象,可以方便地实现缓存功能。

  • 技术细节:Spring提供了CacheManager接口和Cache接口,支持多种缓存实现,如EhCache、Redis等。

Spring Boot生态

Spring Boot是Spring框架的一个子项目,它简化了Spring应用的创建和部署。

1. 自动配置原理

Spring Boot通过自动配置原理,自动配置Spring框架的Bean。

  • 技术细节:Spring Boot通过条件化配置、类路径扫描、属性配置等机制来自动配置Spring框架的Bean。

2. Starter机制

Spring Boot提供了Starter依赖,可以方便地引入所需的库。

  • 技术细节:Spring Boot的Starter依赖包含了一组相关的库,开发者可以通过引入Starter依赖来简化依赖管理。

3. Actuator监控

Spring Boot Actuator提供了丰富的端点,可以用于监控和管理应用。

  • 技术细节:Spring Boot Actuator通过定义端点,如/health、/metrics等,来提供应用的健康状态、性能指标等信息。

4. 配置文件体系

Spring Boot支持多种配置文件,如application.properties、application.yml等。

  • 技术细节:Spring Boot的配置文件支持多种格式,如键值对、JSON、YAML等,方便进行配置管理。

优快云

📥博主的人生感悟和目标

Java程序员廖志伟

希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

- 💂 博客主页: Java程序员廖志伟
- 👉 开源项目: Java程序员廖志伟
- 🌥 哔哩哔哩: Java程序员廖志伟
- 🎏 个人社区: Java程序员廖志伟
- 🔖 个人微信号: SeniorRD

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码--沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

Spring之IOC、AOP及基本使用 Spring是轻量级的开源的JavaEE框架,可以解决企业应用开发的复杂性,有两个核心部分:IOC和Aop。 阅读详情

相关推荐

在Ubuntu 22.04上从零搭建TrinityCore 3.3.5服务器:一份保姆级避坑指南

本文详细介绍了在Ubuntu 22.04系统上从零搭建TrinityCore 3.3.5服务器的完整流程,包括环境准备、源码编译、数据库配置、资源文件处理及性能调优等关键步骤。特别针对国内开发者和低配置用户优化,提供保姆级避坑指南,帮助用户高效搭建魔兽世界经典旧世版本私服。

weixin_33393017的博客 304

Spring的IOC和AOP原理

Spring的IOC和AOP原理 本文讲的是面试之Spring框架IOC和AOP的实现原理, IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。控制权由应用代码中转到了外部容器,控制权的转移是所。 IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。

子冉冰清的博客 2万+

SAP-PM设备模块-PM主数据之功能位置

SAP-PM模块学习

TRUIXIANG的博客 5138

Spring框架IOC和AOP的实现原理与详解

IoC(Inversion of Control)     (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。控制权由应用代码中转到了外部容器,控制权的转移是所谓反转。 对于Spring而言,就是由Spring来控制对象的生命周期和对象之间的关系;IoC还有另外一个名字——“依赖注入(Dependency Inj

baidu_20876831的博客 3万+

使用TBtools进行物种间共线性分析

Sequence Toolkit ---Fasta Tools ----ID Prefix (fasta文件)

sunny_dayone的博客 8755

保姆级教程:在Rockchip RK3588 SDK中,如何为你的新硬件板子创建第一个DTS文件

本文提供在Rockchip RK3588 SDK中为自定义硬件创建首个DTS文件的详细教程。通过分析DTS在RK3588开发中的角色、快速定位参考设计、实操步骤及调试验证方法,帮助开发者高效完成硬件板级配置,特别适合嵌入式Linux系统开发者参考。

weixin_28678831的博客 289

Spring IOC 和 AOP

Spring框架中的IoC(Inverse of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)是其两大核心特性,它们共同为Java应用程序带来了更高的灵活性、可维护性和松耦合度。

Good good study,day day up 2859

保姆级教程:在通达信V7.611上配置欧奈尔RPS曲线(附完整公式与每日更新流程)

本文提供通达信V7.611配置欧奈尔RPS曲线的保姆级教程,涵盖从环境准备、基础设置到核心公式配置的全流程。详细讲解如何创建股票池、编写EXTRS基础公式及RPS显示公式,并附每日更新流程与实战应用技巧,帮助投资者精准捕捉强势股。

weixin_30000735的博客 464

Spring中的IOC和AOP

Spring 框架是一款轻量级的开发框架,核心思想是 IOC(控制反转)和 AOP(面向切面编程)。为 Java 应用程序开发提供组件管理服,用于组件之间的解耦,以及简化第三方JavaEE中间件技术的使用(IMS、任务调度、缓存、ORM 框架),是一个基础架构型的开发框架;。AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它允许开发者将横切关注点(如日志记录、事务管理、安全性等)从业务逻辑中分离出来。

zenbior的博客 3315

【Maxwell16.0】实战指南:从DXF导入到MotorCAD联合仿真的关键技巧

本文详细解析了Maxwell 16.0与MotorCAD进行联合仿真的核心流程与关键技巧。重点阐述了从DXF模型导入、几何修复、一极一槽模型剪裁,到坐标系对齐、MotorCAD参数匹配及结果验证的全过程,旨在帮助工程师高效打通联合仿真链路,规避常见错误,提升电机设计效率。

weixin_29062865的博客 718

Coze工作流的代码无法安装第三方模块(依赖)怎么办?(如何解决Coze工作流代码缺少模块(依赖)的问题)

Coze工作流的代码无法安装第三方模块(依赖)怎么办?(如何解决Coze工作流代码缺少模块(依赖)的问题)

XiaoqiangClub的博客 4365

Spring:IOC和AOP

IOC(控制反转)和AOP(面向方面编程)作为Spring框架的两个核心,可以很好地实现解耦合。

机械工程跑路哥 4491

云原生之容器编排实践-在K8S集群中使用Registry2搭建私有镜像仓库

基于前面搭建的3节点 Kubernetes 集群,今天我们使用 Registry2 搭建私有镜像仓库,这在镜像安全性以及离线环境下运维等方面具有重要意义。作为测试环境,本次使用 Registry2 搭建了私有镜像仓库,实际生产环境建议使用 Harbor;创建了一个 local-storage 的 StorageClass ,并使用本地磁盘的方式创建使用 PV ,实际建议使用 NFS 。

Heartsuit的博客 2462

spring ioc和aop

常见的通知类型有:前置通知(Before)、后置通知(After)、返回通知(After-returning)、异常通知(After-throwing)和环绕通知(Around)。System.out.println("环绕通知的前置通知");System.out.println("环绕通知的返回通知");System.out.println("环绕通知的异常通知");System.out.println("环绕通知的后置通知");System.out.println("===来一首花海===");

weixin_41653006的博客 2070

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Spring IOC 与 Spring AOP

摘要:Spring框架通过IoC(控制反转)和AOP(面向切面编程)实现解耦与模块化。IoC容器负责对象创建与依赖注入,降低耦合度;AOP则将横切关注点(如日志、事务)从业务逻辑中分离,通过动态代理(JDK/CGLIB)实现织入。Spring AOP提供@Aspect等注解定义切面,支持多种通知类型。相比静态代理,动态代理更灵活高效。与功能更强大的AspectJ相比,Spring AOP轻量易用,适合大多数企业场景。IoC设计需考虑生命周期管理、依赖注入方式、作用域支持等核心机制。

PEI04的博客 1499

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Spring IOC与AOP使用详解

Spring5 IOC与AOP使用详解一、Spring功能模块划分图二、初识IOC1、什么是IOC?2、IOC底层使用技术3、IOC优点三、BeanFactory工厂方式实现解耦(IOC核心)四、核心容器的两个接口的区别五、spring对bean的管理细节1、创建bean的三种方式2、bean对象的作用范围3、bean对象的生命周期六、三种注入方式1、构造器注入(通过有参构造器注入)2、setter注入 (更常用)1. 普通类型注入2.集合类型注入3、接口注入七、Bean的生命周期1、 bean 生命周期

weixin_43687849的博客 2045

OV9734 DATASHEET,完整规格书

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

Spring的AOP和IOC

首先了解AOP呐就要了解spring的优点以及DI这个概念,来引入我们的AOP. spring 的优点? 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供...

wangziman的博客 2064

Spring IOC、DI及AOP详解与实战

本文深入解析Spring框架核心的IOC、DI及AOP概念,以通俗易懂的方式阐述其原理与应用。文章先通过生动比喻介绍IOC(控制反转)概念,对比传统"霸道总裁"式对象创建与Spring"甩手掌柜"式管理;接着讲解依赖倒置原则、Spring容器工作流程,并提供手写简易IOC容器示例;随后阐述DI(依赖注入)与IOC的关系及实现方式。整体语言风趣,结构清晰,注重实战应用,帮助读者掌握Spring精髓。

码道源码 1114

Spring的AOP与IOC原理

一、IOC(Inversion of Control):控制反转 传统模式下使用类的方法与属性,我们需要new出这个类的对象,然后使用对象进行方法调用,这种方法耦合度极高,为了降低耦合度,Spring提供了IOC控制反转机制,Spring帮助我们来创建对象就是我们所说的bean,并且管理bean对象,当我们需要用的时候,需要Spring提供给我们创建好的bean对象。这样就从之前我们的主动创建对...

http_red的博客 2237

什么是spring的IOC AOP?

1、Spring IOC     IoC与DI 首先想说说IoC(Inversionof Control,控制倒转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱 好、qq号、电话

Goluck98的专栏 1万+

Spring之IoC与AOP

Spring高级框架之IoC与AOP1 Spring概述1.1 Spring简介1.2 Spring的优势1.3 Spring的核心结构2 核心思想IoC与AOP2.1 IoC2.2 AOP3 Spring IoC高级应用3.1 Spring IoC基础知识3.1.1 BeanFactory与ApplicationContext区别3.1.1.1 启动IoC容器的方式3.1.1.1.1 java环境下启动IoC容器3.1.1.1.2 Web环境下启动IoC容器3.1.2 XML模式3.1.2.1 实例化Be

風雨无阻 1573

Spring中的IOC及AOP概述

Spring中的IOC及AOP概述

多学、多想、多做 1608

Spring的IOC和AOP

IOC、AOP

m0_70091879的博客 1233

Spring aop 和 ioc 介绍一下

1.ioc容器:实际上就是map(key,value),里面存放的是各种对象(在xml里面配置的bean节点、@repository,@service,@controller,@compent)在项目里启动的时候会读取配置文件里面的bean节点,创建对象到map里面。

qq_37163076的博客 1761
上一篇: DDD战略战术设计精讲
下一篇: Spring框架核心技术解析
Java开发廖志伟
博客等级 码龄2年 3491粉丝 1534原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值