请两个框架都说一下。
能被 IOC 管理的都是打了 @Component
及相关注解的,否则 Spring 启动后扫描需要管理的 Bean
时根本就不会理会。
如果你想知道 Spring 有没有处理一些类,那么可以这样:
@Component
public class BeanScanner implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization (Object bean, String beanName) throws BeansException {
System.out.println(String.format("<<Post>> bean: %s | name: %s", bean.getClass().getName(), beanName));
return bean;
}
@Override
public Object postProcessAfterInitialization (Object bean, String beanName) throws BeansException {
return bean;
}
}
跑一下,去日志里看看 <<Post>>
开头的记录里有没有你想看的那几个类。
谢谢回答。我已找到答案:
ssh2的开发者定义的struts2控制器spring ioc容器不管理其生命周期,因为struts2的action往往不加spring的注解,@Controller注解是针对spring mvc的controller的,不适用于struts2的action。struts2的action加了@Component注解就会被spring容器管理生命周期,当成一个普通的bean,这种注解的添加不常见。ssm会管理一些Handler和Adapter的生命周期,开发者定义的控制器也会被管理,因为spring容器分为应用层spring容器和web层spring容器,属于父子关系,符合依赖倒转原则。
以下是网络文章的举例:
ssm请看这一段:
https://blog.csdn.net/l_black...
Controller即声明这个类是一个控制器,上面第二部分我们说明了,只要加了@Controller标示的,spring会通过自动扫描机制,将这个类纳入spring容器管理中。
ssh2的请看这一段:
那时我有些不是很明白,为什么我的action类没有写注解@Component("xxAction"),还是可以被spring自动装配。那是因为action类被struts和struts2-spring-plugin创建,再由spring自动装配,但不由spring管理。如果我们想使用spring复杂的aop或spring其他的功能时,强烈建议将acion类注册到spring容器中。
3 回答2.6k 阅读✓ 已解决
3 回答4.1k 阅读✓ 已解决
8 回答3.7k 阅读
4 回答2.8k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
4 回答1.9k 阅读
struts2
没有用过,我就谈谈SpringMVC
的控制吧,SpringMVC
的控制器,我可以理解成DispatcherServlet
, 这个类在传统的Spring项目中会在web.xml
中进行配置,以下皆以传统Spring项目为例(SpringBoot同理),配置完之后,Servlet容器(tomcat举例)会为DispatcherServlet实例并且初始化,如果load-start-up配置为>= 1 那么,tomcat会主动发起一次http请求,此时dispathcerServlet已经可以投入使用了。如果你配置了Springmvc.xml文件,并且在内部有mvc:resource的配置,很好,Spring会去加载,加载的东西,参考
MvcNameSpaceHandler
, 于是RequestMappingHandler
RequestMappingHandlerAdapter
和Simplexxx
会被加载到Spring容器中,如果配置了 mvc:default-servlet ,那么会对静态资源进行一次重定向处理,重定向到defaultServlet,如果没有配置,也不要怕,我们还有dispatcherServlet.properteis文件。内置了handlerMapping
HandlerAdapter
接下来回答正题,控制是有的,但是没有也是可以的。
另外这里涉及Spring父子容器的关系,就不多说了
Servlet路径映射和springmvc路径处理