文章目录 一、使用 DexClassLoader 获取组件类失败报错 二、失败原因分析 一、使用 DexClassLoader 获取组件类失败报错 ---- 在上一篇博客 【Android 逆向】启动...; 其中的最主要原因是 , 类加载器的双亲委派机制 , 加载 Android 组件类需要使用系统指定的类加载器 , 这些类加载器设置在 LoadedApk 实例对象中 , 并且这些类加载器只能从特定位置加载字节码文件...; 自己自定义的 DexClassLoader 没有加载组件类的权限 ; 如果要加载组件类 , 有两种方案 : 替换类加载器 : 使用自定义的 DexClassLoader 类加载器替换 ActivityThread...中的 LoadedApk 中的类加载器 , 将原来的 LoadedApk 中的类加载器设置为新的父节点类加载器 ; 插入类加载器 : 基于双亲委派机制 , 只要将我们自定义的类加载器插入到系统类加载器之上就可以..., 在 组件类加载器 和 最顶层的启动类加载器之间插入自定义的 DexClassLoader 类加载器即可 ;
之前在文章中和大家讲解了有关Spring开发的基础入门,其中有讲到了在IOC中对bean对象的实例化和从IOC中如何获取相关对象的一系列操作!..., ④表述层控制器组件:@Controller 标识一个受Spring IOC容器管理的表述层控制器组件。...当需要扫描多个包时可以使用逗号分隔。如上面的代码就是扫描com.spring包下面的所有类。 2、包含与排除特定组件 但是这样进行扫描的范围有时候未免还是有一些大,那么能不能再缩小进行包扫描的范围呢?...尽然有扫描包含特定组件,那么就有扫描排除特定组件, 子节点表示要排除在外的目标类。...3、获取组件时的问题 对于使用注解方法添加到容器中的组件,我们在IOC容器中是看不到的,那么获取它的时候应该如何获取呢?
二、四个典型注解 ---- @Component : 标记普通的组件 @Controller : 标记三层架构表述层中的控制器组件(controller) @Service : 标记表述层中的业务逻辑组件...bean不会创建,所以获取没有创建的bean时会报错 ③指定扫描时要排除的组件 XML配置文件中,指定不扫描的组件/扫描时排除的组件 <context:component-scan base-package...- type属性指定根据什么来进行排除,annotation取值表示根据注解来排除 - expression属性:指定排除规则的表达式,对于注解来说指定全类名即可 ④指定仅扫描什么组件 仅扫描 = 关闭默认规则...,@Autowired注解标记 TestService //这个组件就是我们在三层架构中表述层里面,使用的控制器。...@Controller : 标记三层架构表述层中的控制器组件(controller) @Service : 标记表述层中的业务逻辑组件(service) @Repository :
业务逻辑层组件:@Service 标识一个受Spring IOC容器管理的业务逻辑层组件 表述层控制器组件:@Controller 标识一个受Spring IOC容器管理的表述层控制器组件 组件命名规则...① 默认情况:使用组件的简单类名首字母小写后得到的字符串作为bean的id ② 使用组件注解的value属性指定bean的id 注意:事实上Spring并没有能力识别一个组件到底是不是它所标记的类型...,即使将@Respository注解用在一个表述层控制器组件上面也不会产生任何错误,所以 @Respository、@Service、@Controller这几个注解仅仅是为了让开发人员自己明确当前的组件扮演的角色...,Spring容器将会扫描这个基类包及其子包中的所有类。...③ 如果仅希望扫描特定的类而非基包下的所有类,可使用resource-pattern属性过滤特定的类,示例: <context:component-scan base-package="com.atguigu.component
@Controller:用于定义控制器类,在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping...如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。 @ComponentScan:表示将该类自动发现扫描组件。...个人理解相当于,如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。...如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。...@RestController:注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。
@ComponentScan 组件扫描,可自动发现和装配一些Bean。 @Component可配合CommandLineRunner使用,在程序启动后执行一些基础任务。...@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。...,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。...如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。 @ComponentScan:表示将该类自动发现扫描组件。...如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。
自动配置通常是根据项目中引入的类和已定义的 Bean 来实现的。在自动配置过程中,会检查项目的classpath(类路径)中引入的类以及项目依赖的 jar 包中的组件。...Spring MVC: 如果在项目中引入了 Spring MVC 的相关依赖,Spring Boot 会自动配置 基于注解的控制器、视图解析器、异常处理 等,使得开发 Web 应用变得更加简单。...,会从 @EnableAutoConfiguration 注解标注的类所在的包开始扫描。...这也是在使用 @SpringBootApplication 注解时需要将被注解的类放在顶级 package 下的原因,如果放在较低层级,它所在 package 的同级或上级中的类就无法被扫描到,从而无法正常使用相关注解...当使用 @AutoConfigurationPackage 注解时,它会将指定类所在的包及其子包中的组件自动注册到Spring应用程序上下文中,即自动装配这些组件,从而简化了组件的配置和使用。
@ComponentScan:组件扫描,可自动发现和装配一些Bean。 @Component:可配合CommandLineRunner使用,在程序启动后执行一些基础任务。...@RestController:注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。...,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。...如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。 @ComponentScan:表示将该类自动发现扫描组件。...如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。
@ComponentScan 组件扫描,可自动发现和装配一些Bean。 @Component可配合CommandLineRunner使用,在程序启动后执行一些基础任务。...@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。...,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层) 一般这个注解在类中,通常方法需要配合注解@RequestMapping。...如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。 @ComponentScan:表示将该类自动发现扫描组件。...如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。
在展现层使用,控制器的声明(C) 注入bean的注解 @Autowired 由Spring提供 @Resource 由JSR-250提供 java配置类相关注解 @Bean 注解在方法上,声明当前方法的返回值为一个...进行扫描,相当于xml中的(类上) 切面(AOP)相关注解 @Aspect 声明一个切面(类上) 使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数...@ControllerAdvice 通过该注解,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@...@Controller:用于定义控制器类,在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping...如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。 @ComponentScan:表示将该类自动发现扫描组件。
@ComponentScan 组件扫描,可自动发现和装配一些Bean。 @Component 可配合CommandLineRunner使用,在程序启动后执行一些基础任务。...@RestController 注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。...,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。...如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。 @ComponentScan: 表示将该类自动发现扫描组件。...如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。
@ComponentScan 组件扫描,可自动发现和装配一些Bean。 @Component 可配合CommandLineRunner使用,在程序启动后执行一些基础任务。...@RestController 注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。...,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。...如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。 @ComponentScan :表示将该类自动发现扫描组件。...如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。
org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication ←---开启组件扫描和自动配置...SpringApplication.run(ReadingListApplication.class, args); ←---负责启动引导应用程序 } } @SpringBootApplication开启了Spring的组件扫描和...Spring的@ComponentScan:启用组件扫描,这样你写的Web控制器类和其他组件才能被自动发现并注册为Spring应用程序上下文里的Bean。...本章稍后会写一个简单的Spring MVC控制器,使用@Controller进行注解,这样组件扫描才能找到它。...排除依赖 在Maven里,可以用元素来排除传递依赖。
领取专属 10元无门槛券
手把手带您无忧上云