(spring-注解)day43javaEE基础查漏补缺

1.类上加@component。xml中写包的组件扫描。

2.容器中默认的id是当前类名首字母小写,也可以在注解上自定义id。

3.为什么要用controller,不用component?

1.首先比较@Component注解和@Controller注解
Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean对象,而@Controller注解是特殊专门服务控制层的类的注解,这样的注解还有@Service,@Controller,@Repository,这些注解是针对不同的使用场景所采取的特定功能化的注解组件,这些注解用于类上的,根据自动检测和使用类路径扫描自动配置bean。注释类和bean之间存在隐式的一对一映射(即每个类一个bean)。

注解	含义
@Component	最普通的组件,可以被注入到spring容器进行管理
@Controller	作用于控制层
@Service	作用于服务层
@Repository	作用于持久层
2.再比较@Component注解和@Bean注解
@Component注解作用于类上,@Bean作用于方法上,是使用注解方法的返回对象给IOC容器管理,而且所在类必须被@Configuration或@Component注解,用于显式声明单个bean

原文链接:https://blog.csdn.net/qq_45335128/article/details/118370523

4.怎么删除maven项目和复制项目???

Intellij IDEA如何删除项目_xman2008wang的博客-CSDN博客_idea怎么删除maven项目

复制项目模块:1,在外面去复制,2,然后删除.iml文件,3,target等不相关的文件,4,修改pom中的id,5,进入idearoot-pom中引用模块即可。

5.每次pom.xml的头有啥区别。

约束不同,没有约束就没有代码提示。

6.工具类用@component,或者其他不知道怎么分的,用@component。

7.配置类,不需要解耦,只是单例,只加载一次。

8.junit底层有一个运行器

9.maven模块和项目怎么重命名。

IDEA ,给Maven模块(moudel)彻底重命名*_Hcy_code的博客-CSDN博客_moudel

10. @Autowired和@Qualifier注解:

Autowired注解是根据属性的类型进行匹配的:

Spring会在他的IOC容器中按照被标注属性的类型进行寻找,如果查找到了一个就进行注入,如果查找不到或者查找到多个就报错

@Qualifier:跟@Autowired联合使用,代表在按照类型匹配的基础上,如果有多个再按照名称匹配

11.注解配置的时候,其中一个配置类一定要有一个@ComponentScan(“com.xxx”)扫描注解的头,不能光加@Configuration

12.@bean注解:

//只能放在方法上面
//返回值放入容器中,默认id是方法名。
//如果需要参数,spring会自动注入参数。
//会自动把返回值加载入容器中。
@Bean("dataSource")
  public DataSource getDruidDataSource() {
  

13.spring整合junit的时候,注解不可以用一半,比如运行器用注解,配置文件自己手写,是不行,要么都用,要么不用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SvbEUBa9-1642692701238)(问题.assets/1642683237983.png)]

14.jdk的动态代理,代理对象和目标对象实现同一个接口,类似于兄弟关系。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qv8p2AGx-1642692701239)(问题.assets/1642692660011.png)]

cglib动态代理,代理对象相当于目标对象的子对象。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aiAQAsNC-1642692701240)(问题.assets/1642692677281.png)]

15.为啥jdk的动态代理效率高?

JDK动态代理与CGlib动态代理

java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。
CGlib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理(字节码增强)。

总结:

1.JDK动态代理是实现了被代理对象的接口,Cglib是继承了被代理对象。
2.JDK和Cglib都是在运行期生成字节码,JDK是直接写Class字节码,Cglib使用ASM框架写Class字节码,Cglib代理实现更复杂,生成代理类比JDK效率低。
3.JDK调用代理方法,是通过反射机制调用,Cglib是通过FastClass机制直接调用方法,Cglib执行效率更高。

原文链接:https://blog.csdn.net/lx1315998513/article/details/120641124

16.面向切面编程的思想源于,树的横切面,是一圈一圈的年年轮,每个轮相当于一个功能,可以单独开发,运行的时候用动态代理来进行组合。

17.为什么测试要在test里写?

因为maven中有测试的指令,所以要求俺test路径写。

18.动态代理的本质是拼装。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值