Spring

@Autowired与@Resource异同:

1、@Autowired与@Resource都可以用来装配bean。都可以写在字段上,或写在setter方法上。

2、@Autowired默认按类型装配(属于spring规范),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用

3、@Resource(属于J2EE复返),默认按照名称进行装配,名称可以通过name属性进行指定。如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

它们的作用相同都是用注解方式注入对象,但执行顺序不同。@Autowired先byType,@Resource先byName。

4.Spring的常用依赖

<dependencies> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.0.RELEASE</version> </dependency>

    <!-- https://mvnrepository.com/artifact/junit/junit -->
  <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
  </dependency>

</dependencies>

5.使用自动注解时,需要添加的xmlns(xml命名空间):xmlns:context="http://www.springframework.org/schema/context"

需要添加的web根目录: http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd ==还需要在bean.xml中添加标签context:annotation-config/==

(以上所有链接可以通过官方文档查询,学习去官方文档查询)

6.autowire是Bycalss优先,加上@Qualifier可以实现BYType+Byname,而Java中的原生注解@Resource则既不用引入头文件可以实现ioc托管管理,且Byname+ByType

7.@component:组件,放在类上,说明这个类被spring管理了

等价于:<bean id="user",class = "com.huang.pojo.User">

8.@Value

等价与:<bean id="user",class = "com.huang.pojo.User">

value = ?

9.@Component三个衍生注解

为了更好的进行分层,Spring可以使用其它三个注解,功能一样,目前使用哪一个功能都一样。

@Controller:web层

@Service:service层

@Repository:dao层

@scope(作用域)

singleton:默认的,Spring会采用单例模式创建这个对象。关闭工厂 ,所有的对象都会销毁。

prototype:多例模式。关闭工厂 ,所有的对象不会销毁。内部的垃圾回收机制会回收

10.小结

XML与注解比较

XML可以适用任何场景 ,结构清晰,维护方便

注解不是自己提供的类使用不了,开发简单方便

xml与注解整合开发 :推荐最佳实践

xml管理Bean

注解完成属性注入

使用过程中, 可以不用扫描,扫描是为了类上的注解

// context:annotation-config/ 作用:

进行注解驱动注册,从而使注解生效

用于激活那些已经在spring容器里注册过的bean上面的注解,也就是显示的向Spring注册

如果不扫描包,就需要手动配置bean

如果不加注解驱动,则注入的值为null!

11.SpringAOP SpringMVC必面试问到

12.动态代理中,之所以要在Client中的pih.setRent(host)中传入host,{Rent是接口类}

是因为其代理调用处理类中的代码是rent.getClass().getInterFaces(),这样传入了 host后就 实现了面向最终的Rent接口代码。 动态代理中的proxy都是在客户端中动态生成的。

13.使用aop需要导入aop约束

  1. 使用注解进行aop操作时,除了需要在配置文件中注入AnnotationPointCut类以外,还需要添加开启注释生命标签

    aop:aspectj-autoproxy/

  2. 执行的顺序是环绕前--方法执行前---方法执行---环绕后---方法执行后

16.aop:aspectj-autoproxy:说明

通过aop命名空间的<aop:aspectj-autoproxy />声明自动为spring容器中那些配置@aspectJ切面的bean创建代理,织入切面。 当然,spring 在内部依旧采用AnnotationAwareAspectJAutoProxyCreator进行自动代理的创建工作, 但具体实现的细节已经被<aop:aspectj-autoproxy />隐藏起来了

<aop:aspectj-autoproxy />有一个proxy-target-class属性,默认为false,表示使用jdk动态代理织入增强, 当配为<aop:aspectj-autoproxy poxy-target-class="true"/>时,表示使用CGLib动态代理技术织入增强。 不过即使proxy-target-class设置为false,如果目标类没有声明接口,则spring将自动使用CGLib动态代理。

  1. 回顾mybatis,需要在pom中加入解决静态过滤问题的依赖。

    <build> <resources> <resource> <directory>src/main/java</directory> ==这里原来是resource,手动改java,以为使用Java包下的xml文件== <includes> <include>/*.properties</include> <include>/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>

  2. 学习任何东西,包括代码,一定要潜心、细心,不可急于求成,要多动手

    在你努力的情况下,任何回报都是你努力的成果。

posted @ 2021-11-24 21:23  KingCae  阅读(33)  评论(0)    收藏  举报