spring-注解
- 1.类上加@component。xml中写包的组件扫描。
- 2.容器中默认的id是当前类名首字母小写,也可以在注解上自定义id。
- 3.为什么要用controller,不用component?
- 4.怎么删除maven项目和复制项目???
- 5.每次pom.xml的头有啥区别。
- 6.工具类用@component,或者其他不知道怎么分的,用@component。
- 7.配置类,不需要解耦,只是单例,只加载一次。
- 8.junit底层有一个运行器
- 9.maven模块和项目怎么重命名。
- 10. @Autowired和@Qualifier注解:
- 11.注解配置的时候,其中一个配置类一定要有一个@ComponentScan("com.xxx")扫描注解的头,不能光加@Configuration
- 12.@bean注解:
- 13.spring整合junit的时候,注解不可以用一半,比如运行器用注解,配置文件自己手写,是不行,要么都用,要么不用。
- 14.jdk的动态代理,代理对象和目标对象实现同一个接口,类似于兄弟关系。
- 15.为啥jdk的动态代理效率高?
- 16.面向切面编程的思想源于,树的横切面,是一圈一圈的年年轮,每个轮相当于一个功能,可以单独开发,运行的时候用动态代理来进行组合。
- 17.为什么测试要在test里写?
- 18.动态代理的本质是拼装。
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的时候,注解不可以用一半,比如运行器用注解,配置文件自己手写,是不行,要么都用,要么不用。
14.jdk的动态代理,代理对象和目标对象实现同一个接口,类似于兄弟关系。
cglib动态代理,代理对象相当于目标对象的子对象。
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路径写。