spring 1016 -动态代理

本文介绍了Spring框架的基础概念,包括IOC容器、依赖注入、生命周期管理等,并详细讲解了如何利用Spring进行对象创建与管理,以及Spring单元测试的实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对象的加强的三种方式:
继承
装饰着模式
动态代理
spring ioc 的意思其实就是 将创建对象的权利交给spring 来做

实现代理模式的要点:

(一)静态代理:必须提供代理类
1、目标类(pjl)和代理类(wp)都必须 实现同一个接口 (kindwoman)
2、访问目标类对象,必须通过代理对象,这一点跟装饰着是差不多的。
3、在代理对象(wp)中声明接口(kindwoman)的引用作为成员变量通过类的构造函接口要代理的目标对象,然后赋值给这个引用
1255495-20171017001013037-206355921.png
 
4、在代理兑现中实现 的方法去调用目标类对象,同时可以做一些其他的操作。

1255495-20171017001013162-1678287432.png
 1255495-20171017001013271-854264581.png

这边这个目标对象一定要用final 修饰

//动态代理:是通过jdk提供的proxy
 所以不用写代理类,也不用在代理定义接口的成员变量,因为都没有代理类

动态代理:
1/第一个参数:通过目标类得到类加载器
2/第二个参数:通过目标类得到所有要实现的接口
3/第三个参数:
 1255495-20171017001013490-996880384.png



注解:

前面的基于bean的注解方法:
本来都可以有

1. @Component取代<bean class="">

@Component("id") 取代 <bean id="" class="">

2.web开发,提供3@Component注解衍生注解(功能一样)取代<bean class="">

@Repository dao层 

@Service:service层

@Controller:web

3.依赖注入 ,给私有字段设置,也可以给setter方法设置

普通值:@Value("")

引用值:

方式1:按照【类型】注入

@Autowired

方式2:按照【名称】注入1

@Autowired

@Qualifier("名称")

方式3:按照【名称】注入2

@Resource("名称")

4.生命周期

初始化:@PostConstruct

销毁:@PreDestroy

5.作用域

@Scope("prototype") 多列

singlon 就是单例



 




set注入不仅要配置beans 而且还有在相应的配置中action 中加getset方法
注解还不用写xml的都读写

//使用Springjuint 4的测试,首先需要导包,然后在写注解

/加载spring 配置文件
//使用spring继承的junit4的测试
    @RunWith(SpringJUnit4ClassRunner.class)
    //加载spring配置文件
    @ContextConfiguration(locations="classpath:applicationContext.xml"
    public class Testxml {
        @Autowired
        private UserAction userAction;
        
        @Test
        public void test1() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException{
//            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//            UserAction userAction2 = context.getBean("userAction",UserAction.class);
//            System.out.println(userAction1==userAction2);
            userAction.excute();
            //context.getClass().getMethod("close").invoke(context, null);
        }
    }
然后在application 当中一个文件搞定

1255495-20171017001013724-2126408236.png
 
@Test
    // 做到单元测试然后给测试 测试越精细,以后麻烦就更少了
    public void tset1() throws IllegalAccessException,
            IllegalArgumentException, InvocationTargetException,
            NoSuchMethodException, SecurityException {
        // 这一种方式是通过读写配置文件 ,其实前面应该是applicationContext
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        // UserAction userAction2 = context
        // .getBean("userAction", UserAction.class);
        userAction.excute();
        // 这是通过高反射机制来读取xml
        context.getClass().getMethod("close").invoke(context, null);


评语 :今天的状态,还可以,就是对于动态调用的方法没有深入去研究很遗憾,这边的话,真的需要自己多多的去深入进去。以后上课内容不懂的,一定要厚着脸皮好好去问。明天新的老师来,和他搞好关系自己多学习一下




转载于:https://www.cnblogs.com/AnTank/p/7679535.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值