spring入门和IOC <No.1>

spring入门和IOC <No.1>,第1张

spring入门和IOC <No.1> 1.spring入门和IOC 1.1Spring 是什么

Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 SpringMVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE 企业应用开源框架。

1.2Spring 的优势

• 方便解耦,简化开发

• AOP 编程的支持

• 声明式事务的支持

• 方便程序的测试

• 方便集成各种优秀框架

• 降低 JavaEE API 的使用难度

1.3Spring 的体系结构

2. Spring 的IOC入门 2.1什么是程序的耦合

耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。

2.2IOC底层分析

2.2.1通过new创建

User user = new User();   缺点,使用几次,就要创建几次,耦合度

2.2.2通过接口实现类进行创建

UserDao userdao=  new UserDaoImp();
UserDao userdao=  new UserDaoImp2();

优势:更灵活,更容易拓展,复用性

缺点:接口和实现类耦合度较高

2.2.3通过工厂模式,将接口和实现类进行组合起来

接口 实现类

工厂

class PubFactory{
    public static UserDao getUserDaoInstance(){
        return new UserDaoImp2();
    }
    public OrderDao getOrderDaoInstance(){
        return new OrderDaoImp();
    }
}
UserDao userdao= PubFactory.getUserDaoInstance();

依旧存在耦合,实现类和工厂的耦合

2.2.4工厂类+配置文件+反射

1.配置文件xml配置

2.工程类通过返回返回对象
class PubFactory{
    public Object getInstance(String id){
        2.1解析xml
        2.2通过反射获取我们的Class
        Class clz= Class.forName('cm.hp.Dao.UserDaoImp');
        2.3创建对应的对象并返回
        return  clz.newInstance()
    }
}

2.3IOC和DI的关系(ioc入门和好处)

• IOC是控制反转,将创建对象的权利(new 对象的过程)交给Spring容器管理。不再由程序员自己创建创建对象,从而降低程序间的耦合关系。

• DI是依赖注入,需要有IOC的环境支持,当一个bean被Spring容器管理后,可以通过DI给该bean所属的实例的属性赋值。

2.4bean的生命周期 ,及 bean的scope使用场景

默认是 单实例 ,可以通过scope指定多实例

单例:节约对象创建的时间和垃圾回收时间,但是可能面临并发的危险;

所以大部分情况都是使用单例,只要注意在使用单例的时候可能造成的并发就可以了;

对象属性最好是不能更改的,或者控制其更改;

从性能上考虑的话,使用单例的配置很不错,毕竟spring默认就是使用单例,

当然你如果已经出现了并发的问题了,就需要使用prototype了

2.4属性注入(注解注入) 2.4.1.构造器注入

要有对应的构造函数,并且给其进行赋值 *** 作

2.4.2.set注入

需要实体类有对应的set属性

2.4.3注解注入

主要有四种注解可以注册bean,每种注解可以任意使用,只是语义上有所差异:

@Component:可以用于注册所有bean

@Repository:主要用于注册dao层的bean

@Controller:主要用于注册控制层的bean

@Service:主要用于注册服务层的bean

在需要的地方,使用@Autowire 或者@Resource注入属性

Resource是按照类的名称注入的. 默认就是当前类的名字 ,也可以自行指定的别名字

Autowire是按照类型注入的,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false , @Autowire(required=false)

如果Autowire要想使用名称注入需要 和@Qualifier 结合, 例如:

@Autowired

@Qualifier("productDao1")

那么此时 ProductDao的注解中需要有一个名称@Component("productDao1")

2.4.4. xml和注解的混合使用 , 也是开发中常见的方式

2.5多个配置文件读取方式

以一个配置文件为主,在里面通过import引入后面的配置文件

2.6Bean的其他注解 2.6.1Bean的生命周期方法注解

@PostConstruct 用于注解生命周期初始化方法

@PreDestroy 用于注解生命周期销毁方法

2.6.2Bean的Scope 注解

@Scope 注解作用在类层面,默认的单例模式

3.IOC的Xml和注解的写法对比

4.IOC的Xml和注解的写法优缺点: 4.1 注解写法:

特点,方便开发,提高开发效率,

缺点:如果当前应用升级,此时必须查看源代码才能完成升级

4.2Xml写法:

特点,类结构清晰,对于系统升级维护有优势,

缺点:需要大量的xml配置信息

4.3Xml和注解的混合写法:

一般混合写法,会将bean的创建过程仍旧交给spring容器,属性的注入采用注解的写法

DemoTest

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5434445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存