spring学习笔记p20-p27

IOC操作Bean管理(基于注解方式)

1.什么是注解

(1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值…)
(2)使用注解,注解可以作用在类上面,方法上面,属性上面
(3)注解的目的:简化xml配置

2.spring针对Bean管理中创建对象提供注解

(1)@Component
(2)@Service
(3)@Controller
(4) @Repository
上面四个注解功能是一样的,都可以用来创建bean实例

3.基于注解方式实现对象创建

第一步 引入依赖
在这里插入图片描述
第二步 开启组件扫描

<!--开启组件扫描
   1 如果扫描多个包,多个包使用逗号隔开<context:component-scan base-package="com.atguigu.spring5.demo3dao,com.atguigu.spring5.demo3service"></context:component-scan>
   2 扫描包上层目录<context:component-scan base-package="com.atguigu"></context:component-scan>
-->

第三步 创建类,在类上面添加创建对象注解


import org.springframework.stereotype.Component;

//在注解里面value属性值可以省略不写
//默认值是类名称,首字母小写
//UserService--userService
@Component(value="userService")//<bean id="userService" class=".."/>
public class UserService {
    public void add(){
        System.out.println("service ");
    }
}

4.开启组件扫描细节配置

    <!--示例1
    use-default-filters="false" 表示现在不使用默认filter,自己配置filter
    context:include-filter 设置扫描哪些内容
        -->
    <context:component-scan base-package="com.atguigu" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--示例2
    下面配置扫描包所有内容
    context:exclude-filter:设置哪些内容不进行扫描
    -->
    <context:component-scan base-package="com.atguigu" >
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

5.基于注解方式实现属性注入

(1)@Autowired:根据属性类型进行自动装配
第一步 把service和dao对象创建,在service和dao类添加创建对象注解
第二步 在service注入dao对象,在service类添加dao类型属性,在属性上面使用注解

@Service
public class UserService {

    //定义dao类型属性
    //不需要添加set方法
    //添加注入属性注解
    @Autowired
    private UserDao userDao;
    public void add(){
        System.out.println("service ");
        userDao.add();
    }
}

(2)@Qualifier:根据属性名称进行注入
这个注解的使用,和上面@Autowired一起使用

//添加注入属性注解
    @Autowired   //根据类型进行注入
    @Qualifier(value="userDaoImpl")
    private UserDao userDao;

(3)@Resource:可以根据类型注入,可以根据名称注入

//@Resource //根据类型进行注入
    //@Resource(name="userDaoImpl")根据名称进行注入
    private UserDao userDao;

(4)@Value:注入普通类型属性

@Value(value="abc")
private String name;

6.完全注解开发

(1)创建配置类,替代xml配置文件

@Configuration //作为配置类,替代xml配置文件
@ComponentScan(basePackages = {"com.atguigu"})
public class SpringConfig {
    
}

(2)编写测试类

AOP(概念)

1.什么是AOP

(1)面向切面(方面)编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
(2)通俗描述:不通过修改源代码方式,在主干功能里面添加新功能。

AOP(底层原理)

1.AOP底层使用动态代理

(1)有两种情况动态代理
第一种 有接口情况,使用jdk动态代理
在这里插入图片描述

第二种 没有接口情况,使用CGLIB动态代理
在这里插入图片描述

AOP(jdk动态代理)

1.使用JDK动态代理,使用Proxy类里面的方法创建代理对象。

在这里插入图片描述
(1)调用newProxyInstance方法
在这里插入图片描述
方法有三个参数
第一个参数,类加载器
第二个参数,增强方法所在的类,这个类实现的接口,支持多个接口
第三个参数,实现这个接口InvocationHandler,创建代理对象,写增强的方法。

2.编写JDK动态代理代码

(1)创建接口,定义方法

public interface UserDao {
    public int add(int a,int b);

    public String update(String id);
}

(2)创建接口实现类,实现方法

public class UserDaoImpl implements UserDao{
    @Override
    public int add(int a, int b) {
        return a+b;
    }

    @Override
    public String update(String id) {
        return id;
    }
}

(3)使用Proxy类创建接口

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值