Spring

目录

一、Spring是什么?

二、Spring 的主要功能(两大核心IOC和AOP)

1、IOC:  Inversion Of  Control,控制反转

  ①举例说明

  ②为什么这么做?

  ③IOC 容器

2、DI:依赖注入

3、AOP:


一、名词解释

  • JAR包:  JAR(Java Archive)是一种软件包的压缩格式包含大量Java类文件、相关的元数据和资源(文本、图片、xml等)文件到一个压缩包当中。即写好不能够编译后的一个 java 程序包。
  • Library:  库。JAR包的集合。Library常常被缩写为lib。

  • User Library:  用户库。JAR包的集合。

  • Bean: Bean的广义上解释为任何的java对象。Bean的狭义解释为:需要在视图上展示,或需要被序列化与反序列化的对象。它的作用与VO(View Object) ,POJO(Plain Ordinary Java Object) 是十分相拟的。

  • ID: 唯一标识符。使某个对象唯一的凭证。类似于身份证号是唯一的。

  • Name:名字。类似于身份证上的名字(不必为一,可以重复)。

  • Log4j: log for java。Log是日志的意思。for是用途。Log for java :用于java的日志工具。

  • 切面:切面指的是辅助业务类。
  • 被切面:被切面指的是主业务类。
  • 切点:被切面当中的方法称为切点。切点的英文是:JoinPoint。又称切入点,联合点,连接点。它是两个面的连接点。
  • 通知:切面当中的方法称为通知。通知的英文是:Advice。

  • 代理:代理是以被代理者的名义进行活动的行为。AOP中的代理是动态代理,是运行时动态的把被切面(主业务)和切面(从业务)的一部分拼接在一起形成,有人形象的把这种行为称作”动态织入”。
  • IDE:Integrated Development Environment 。集成开发环境。常见的集成开发环境:NetBeans,Eclipse,MyEclipse,IDEA。
  • DB:Database。数据库。

 

二、Spring是什么?

        Spring 是面向分层的 Java 一站式轻量级开发源框架,优势是任意分层可以使用任何组件。整合资源,优秀的可插拔性。

        官网:Spring | Home      

三、Spring 的主要功能(两大核心IOC和AOP)

1、IOC:  Inversion Of  Control,控制反转

     将设计好的对象交给容器管理,而不是传统的在对象内部直接控制。IOC 是由一个专门的容器来管理这些对象,既 由IOC 容器控制对象的创建,解决耦合问题。

  ①举例说明

//创建对象
public class UserService {
    private IUserDao userDao = new UserDao();//多态:父类型引用指向子类型

    public void save(User user) {
        userDao.save(user);
    }
}

public class Test {
    public static void main(String[] agrs) {
        UserService userService = new UserService();
        userService.save(user);
    }
}


//反转:
public class UserService {
    private IUserDao userDao;//多态,不实例化

    public void save(User user) {
        userDao.save(user);
    }

    //使用Setter来设置userDao
    public void setUserDao(IUserDao userDao) {
        this.userDao = userDao;
    }
}

public class Test {
    public static void main(String[] agrs) {
        UserService userService = new UserService();
        userService.setUserDao(new UserDao());//多了这一行
        userService.save(user);
    }
}

     Dao 本应该在 Service 内部创建及维护。控制反转是应用(Service)本身不负责依赖对象(Dao)的创建及维护,依赖对象的创建是由外部容器(Test)负责的。这样控制权就由应用内部转移到了应用外部容器(依赖倒置)。

  ②为什么这么做?

        做了反转就有了无数种可能。不做反转有且只有一种可能。

  ③IOC 容器

         IOC 容器:依赖对象的创建及维护是由外部容器负责的,这里就是指 IOC 容器。

         所有的对象都要盛装载 IOC 容器中,由 IOC 容器统一调度和分发。这就实现了优秀的插拔能力(高内聚,低耦合)。

耦合:模块之间的依赖关系,模块间联系越多,其耦合性越强,独立性越差。

内聚:模块之间的独立性越强内聚程度越高

        

2、DI:依赖注入

        由容器动态的将某个依赖注入到组件中,从而提高组件重用的频率。
        核心:把依赖交给容器,容器帮你管理依赖。

3、AOP:

面向切面编程(AOP):运行期动态实现在不修改源代码的情况下给程序添加功能。对目标功能进行扩展或者是增强,让主业务方法变得简单和单纯。

代理:是一种设计模式,提供了对目标对象另外的访问方式:通过代理访问目标对象
        静态代理:继承父类或者实现接口
            在编译阶段就已经存在的代理。它需要实现与目标对象一样的接口。
            优点:可以做到在不修改源代码的情况下,对目标对象功能扩展。
            缺点:
                因为代理对象需要与目标对象实现一样的接口,所以代理类较多
                一旦接口增加方法,目标对象与代理对象都要维护。
        动态代理:在编译阶段不存在,运行时才动态生成的代理。
            jdk 动态代理:为接口生成子类,子类和父类之间是接口实现关系,自动调用    
            cglib 动态代理(子类代理):为类生成子类,子类和父类之间是继承关系会自动使用 cglib
            区别:
                jdk 代理对使用动态动态代理的类必须实现一个或多个接口;CGlib是针对类实现代理,对指定的类生成一个子类,并覆盖其中的方法,这种通过继承类的实现方式,不能代理 final 修饰的类。
        
二、常用注释
向容器中注入:
@Repository:    用于向 IOC 容器中放入持久层
@Service:        用于向 IOC 容器中放入业务层
@Controller:    用于向 IOC 容器中放入控制层
@Component:    用于向 IOC 容器中放入组件(任何类型)
从容器中取出:
@Autowire:    ByType自动从容器中按照类型查找匹配的 Bean,并执行 DI(无需Setter,使用反射完成)
@Resource(name="名称"):ByName按名称取出,用于资源文件(最好不用)
@Qualifier("名称"):按名称取出,(必须和 @AutoWire 同时存在)等价于 byname
@Value:用于解析 properties

3、Spring 依赖注入方式:
1、set 方法注入
2、构造器注入
3、静态工厂的方法注入
4、实例工厂的方法注入

4、set 跟构造器注入的区别:
构造器注入保证所有的注入都被初始化,但是 setter 注入提供更好的灵活性来设置可选依赖。
如果使用 xml 来描述依赖,Setter 注入的可读写会更强。
强制依赖使用构造器注入,可选依赖使用 setter 注入。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值