0 0

SPRING搞来搞去,现在又使用注解了,请问比程序中用new来实例化好吗?0

SPRING什么依赖注入,配置文件,装配类,搞来搞去,现在又用回注解了,请问这跟程序里写new有什么不同呢?
2013年7月12日 11:04

5个答案 按时间排序 按投票排序

0 0

使用new,前提是使用者必然和被使用者发生耦合,至少需要知道构造方法。
如果一个类在项目中到处被new,这个类就被深度耦合了,任何对其构造方法的修改,都会造成不可预计的后果,有十个类私用它,你就需要修改十个类,有一百个类使用它,你就需要改一百个。

从代码的角度来说,无数个new + 构造方法,就是最大的重复代码。


使用IOC容器,等于把创建对象的工作统一交给了IOC容器,被使用者的构造方法发生修改,你调整下容器配置就行了,所有使用者根本不关心你是怎么创建的,拿来用就行了。

更何况spring还提供了非常多的附加功能,单例非单例,是否延迟加载,是否需要使用代理类扩展功能,这些IOC容器在对象创建时统统都能帮你解决。

2013年7月12日 17:08
0 0

new是小事,更关键在于IoC。无论是配置文件还是注解都是一种实现方式。注解能提高编程速度,而配置文件更便于管理,而且现在的IDE工具对Spring支持都很好,哪怕是注解也能第一时间找到来源类。

实例化一个对象怎么弄效率影响都不大,而IoC的注入机制对开发效率的影响就太大了。如果还用上了AOP,那用不用Spring直接对整个项目的代码结构产生了巨大影响。

需要一个类的时候直接向Spring去要和自己去new一个对象或者是getInstance的体验是完全不同的。

2013年7月12日 15:22
0 0

spring为了管理对象的生命周期的一个工具

假设,你的系统中有很多个类,有的需要单例,有的不需要,那么需要单例的就需要你自己来实现单例了。

而spring就提供了一个生成单例的工具,免得我们重复去开发了。

spring在生成对象实例的时候是用的反射机制,应该是有两种jdk自带的和cglib(以前看到的,记得不是很清楚了),你说的new这种方式就是我们平常用到了。他们都是用来生成对象实例的,只是实现的机制上不同而已。如果为了提供一个类似工具类这样的,直接用new的方式就满足不了大部分的场景,而反射就没有问题了。

至于spring中的配置文件和注解的,这个就不用多说了。看你的理解了,各有优缺点。也争论了好久了。

2013年7月12日 11:26
0 0

之前写的《我对IoC/DI的理解》可以参考,

2013年7月12日 11:25
0 0

简单来说就是把依赖关系交给spring管理,问涛ge(jinnianshilongnian),他在spring方面研究的很深入。

2013年7月12日 11:13

相关推荐

    41. Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】

    在`@Bean`方法中,Spring会调用这个方法来创建Bean实例,并自动处理依赖注入。如果你的类有依赖,可以在`@Bean`方法内部创建并注入。 在`spring-boot-hello3`这个项目中,很可能是演示了如何通过Java配置创建和注册...

    Struts2 Spring Hibernate的配置及登录实例(附源码)

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责:Struts2作为MVC架构的一部分,负责处理用户请求和展现视图;Spring作为一个全面的框架,提供依赖注入(DI)和面向切面编程(AOP)...

    Struts+Spring+Hibernate开发实例.pdf

    标题和描述中指出的文档《Struts+Spring+Hibernate开发实例.pdf》包含了关于这三个流行的Java开源框架结合使用的示例代码和相关知识点。Struts负责视图与控制器部分,Spring负责业务逻辑层及依赖注入,Hibernate负责...

    spring bean XML配置入门

    Spring容器通过XML配置文件或注解来定义Bean及其相互关系。 3. **XML配置文件**: "spring-beans"是Spring中用于配置Bean的XML文件。该文件包含了一系列的元素,每个元素表示一个Java对象的定义,包括类名、属性值...

    springboot 多数据源实例

    - 使用`@Transactional`注解,并通过`@Transactional(propagation = Propagation.REQUIRES_NEW)`来控制事务边界,确保在切换数据源时能正确处理事务。 4. **SQL脚本**: - 提供的sql脚本可能是用来初始化各个数据...

    mybatis +spring整合jar 包

    然后,通过@Autowired注解,Spring能够自动注入Mapper接口实例,供业务逻辑代码使用。 在MyBatis的配置文件中,需要设置数据源、事务管理器,并定义Mapper文件的位置。Mapper文件是XML格式,包含SQL语句和结果映射...

    16.spring与springmvc常见面试题.docx

    "spring与springmvc常见面试题" Spring 是一个流行的 Java Web 应用框架,提供了 ...(不推荐使用)2、声明式事务,在配置文件中配置(推荐使用)声明式事务又分为两种:基于注解的声明式事务和基于 XML 的声明式事务。

    springMVC的数据传递

    在Spring MVC框架中,数据传递是应用程序与用户交互的核心部分。Spring MVC提供了多种方式来处理数据,包括模型绑定、请求参数、路径变量等。这里我们将深入探讨如何利用`@ResponseBody`和`ResponseEntity`实现返回...

    SSH框架面试题.pdf

    例如,可以在Struts的Action层中使用`@Transactional`注解来声明事务边界,或者通过Spring的`<tx:method>`配置来控制事务。 40. **在SSH环境中用Spring代替Struts的ActionServlet的优势是什么?** 使用Spring可以...

    hibernate中用annotation的demo

    然后使用`AnnotationConfiguration`或`Configuration`实例化`SessionFactory`。 6. **事务管理**:在处理数据库操作时,事务管理是必不可少的。可以使用`@Transactional`注解在方法级别进行事务控制。例如,在...

    164个Java完美程序

    12. **注解(Annotations)**: 注解为编译器和运行时系统提供了元数据,可用于代码的自描述和元编程,例如用于配置Spring框架或进行代码检查。 13. **垃圾回收(GC)**: Java的自动内存管理机制,负责释放不再使用的...

    SpringBoot实现子类的反序列化示例代码

    本文详细介绍了如何使用Jackson实现子类的反序列化,在SpringBoot中,我们可以使用Jackson来实现反序列化,通过使用@JsonTypeInfo和@JsonSubTypes注解,我们可以根据指定的字段值来指定实例化中用到的具体的子类类型...

    swing界面设计之JTree

    本节主要介绍如何利用Spring框架结合Swing来开发图形用户界面(GUI),并通过依赖注入来增强应用程序的灵活性与可维护性。 **前提条件** - Java基础知识。 - Spring框架的基础知识。 - 对Swing有一定的了解。 **...

    海辉面试题

    #### 为什么会在项目中用spring?它有什么优势?用哪个特性可以实现事务管理? - **优势**:简化依赖注入、提供AOP支持、简化配置。 - **事务管理**:使用`@Transactional`注解或通过XML配置。 #### forward和...

    最新大厂Java面试题(上).pdf

    Spring注解用于简化配置,常见的注解有@Component、@Service、@Repository、@Controller等。 #### Spring数据访问 Spring数据访问包括JDBC、JPA、Hibernate等多种技术的集成。 #### Spring面向切面编程(AOP) ...

    SpringHibernate:设置spring hibernate项目

    在这里,你需要配置Spring的IoC容器,定义Bean的实例化、依赖关系和事务管理器。 5. **配置Hibernate**:创建`hibernate.cfg.xml`,这是Hibernate的配置文件,用于配置数据库连接、实体扫描路径、方言等信息。 6. ...

    面试官:程序员,请你告诉我是谁把公司的面试题泄露给你的?(java岗).pdf,这是一份不错的文件

    - Spring框架中用到了工厂模式、单例模式、装饰器模式、代理模式等多种设计模式。 8. **NIO与TCP粘包/拆包**: - NIO(非阻塞I/O)处理粘包/拆包问题,通过Buffer进行数据读写,避免数据交错。 - TCP协议本身不...

    springMVC的demo

    在"springMVC的demo"中,我们可以看到各种注解的实例,这些都是SpringMVC中用来简化配置和增强功能的关键元素。 首先,让我们深入了解一下SpringMVC的核心组件: 1. **DispatcherServlet**:这是SpringMVC的入口点...

    mybatis-3官方zip包

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    本人开发过程中用到的开发文档

    在开发过程中,拥有详尽且实用的开发文档是至关重要的,它们可以帮助开发者更好地理解各种技术栈,提高开发效率,减少错误。以下是对标题、描述以及标签中涉及的技术点的详细说明: 1. **Java**: Java是一种广泛...

Global site tag (gtag.js) - Google Analytics