spring之1

1.注解方式和配置文件方式的混用:
1.配置文件方式 : 用于配置对象的创建 
<beans>
<!--开启扫描-->
<context:component-scan base-package="需要扫描注解的包名"></context:component-scan>
<!--配置对象-->
<bean id="对象在框架中的名称" class="要被创建对象那个类的全类名"></bean>
</beans>
2.注解方式 : 用于搭建对象之间的引用关系 @Resource(name="被引用对象的名字")

2.aop的实现方式动态代理:
1.使用JDK动态代理,针对有接口的情况,
2.使用cglib动态代理,针对没有接口的情况;


3.代理工厂类做的事情:
当你给动态代理工厂一个需要被代理的对象 target 时,动态代理工厂用Proxy的API给你动态创建一个代理对象proxy,并且会同时给
这个代理对象绑定了一个invoke()方法(ps:这个invoke()方法是在一个 Invocation 类中定义的),这个invoke方法有何特
点呢? 1.因为代理对象 proxy 是工厂给你的,这个invoke()方法也是工厂给你绑定的,所以,这个invoke()方法可以监听到你在
什么时候,调用了这个代理 proxy 的哪个方法 method(),所以一旦你调用代理的某个方法,马上就会被invoke()方法监听到,它可以马上
获得当前被调用的方法 method() 的对象 Method,以及调用方法的代理对象 proxy ,还有你调用方法时传入的参数 Object[] params ;
当然,此时你也可以获得被代理的对象 target(实际操作中是让代理工厂实现了Invocation接口,那么invoke()方法也在代理类中,所以在创
建代理类时通过构造传参,将对象target传过去),那么此时此刻,你可以在invoke(),方法中直接 用你获得的method对象,传入被代理的对象
target 和 参数 params,这样就完成了通过代理对象 proxy 调方法,实现了 目标对象 target 的相应方法被调用,但是,但是,如果你一旦
在invoke()方法中写点儿其他东西,比如说:你在 Method 对象invoke之前或者之后 做了一些其他的操作,那么这就意味着,此时此刻,你用
代理调用方法,不仅意味着目标对象target的相应方法被调用,而且同时执行了其他操作,这个就是动态代理实现了功能的增强;


4.在spring框架中 , 属性注入方式:
1.在xml中配置:
1.属性注入<property name="" name=""(或者ref="")></property> ,需要bean类有setter,getter方法
ps:可以用P名称空间来替代,看起来更简洁,但是相对不够直观,用得不多;
2.构造方法注入 <constructor-arg index="0" value=""></constructor-arg>
   <constructor-arg index="1" value=""></constructor-arg>, 需要有相应构造方法;
ps:可以用C名称空间来替代,看起来更简洁,但是相对不够直观,用得不多;

2.注解方式配置(如果修饰属性,可以不用提供setter ,getter方法)
1.简单属性注入: @value(值)
2.针对属性是bean类型的注入:
1.@autowired() 默认是按类型匹配 ,可以和 @Qualifier(value="") 配合使用;在类型有多个匹配时,按名称匹配
2.@Resource(name="") 按名称匹配;
3.注意:@Value @Autowired它们可以修饰属性,也可以修饰setter方法,如果写在属性上,就不需要提供setter方法。


5.bean注册到spring容器(工厂)管理中(注解方式):
1.首先要开启注解扫描: 我们在applicationContext.xml文件中使用了一个标签 <context:annotation-config />,
它代表的是可以使用spring的注解,但是我们在类上添加的注解,spring不知道位置。要解决这个问题,
我们可以使用<context:component-sacn base-package=””>


2.@Component
3.在spring2.5后为@Component添加了三个衍生的注解
@Repository 用于DAO层
@Service 用于service层
@Controller  用于表现层


6.Spring在web开发中的应用
1.在web项目中要使用spring需要导入一个jar包
2.在web.xml文件中配置Listener
这个ContextLoaderListener它实现了ServletContextListener
在这个listener中,当服务器启动时,将ApplicationContext对象,其实是它的一个实现类
WebApplicationContext,对象存入到了ServletContext中。
3.我们还需要在web.xml文件中配置applicationContext.xml文件的位置
默认情况下会在WEB-INF目录 下查找applicationContext.xml
如果applicationContext.xml文件不是在默认位置,我们可以在web.xml文件中配置


Classpath:applicationContext.xml 它代表的是在当前工程的类路径下(可以理解成是在src)下来查找applicationContext.xml文件。
contextConfigLocation它是在listener中声明的一个常量,描述的就是spring配置文件的位置。


7. ssh三大框架整合之后的流程 (网上搜的)
 1. 服务器启动,启动时加载web.xml,通过spring监听器加载对应的spring配置,将配置(或配置)好的bean实例化,放入到spring容器之中。
 2. 在加载spring配置文件时,会对应的加载spring配置文件中的hibernate映射文件,
 3. 浏览器端发送请求,通过struts2的过滤器(cleanUpFilter..DispatcherFilter核心),找到对应的actionMapper,判断请求是否为action请求
 4. 如果是action请求,便会在struts2-spring容器中查找对应名字的action实例(如果不是action实例,便会直接调用jsp等其他资源作为响应)。
 5.action实例会调用Action类中对应的方法,该方法中会调用对应的service中的业务逻辑方法来响应,action会找到spring容器中对应的service实例,
通过setter方法来注入到action中。
 6.同样,service实例中需要的dao也会以同样的方式注入到service中。之后完成对应的数据库操作。
 当然在中间会调用struts2的拦截器,这个拦截器调用的时机没有变化。
 可以根据自己的理解来叙述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值