说说你对spring的理解

在传统程序中,当某个角色需要另外一个角色协助时,由调用者来创建被调用者的实例。而在Spring中,创建被调用者的的工作不再由调用者来完成,而由第三方Spring容器来完成,所以称为控制反转,Spring容器创建被调用者的实例,然后注入调用者,所以又称为依赖注入

工作原理

  • 工厂类设计模式,实现BeanFactory接口,程序中通常用子类ApplicationContext
  • 基于配置
  • ioc负责对象的生命周期,创建->初始化->摧毁
  • 反射
  • 代理

控制反转(ioc)

  • 一般我们创建对象都是自己new一个,现在我们只需要交给spring处理,我们不需要关心它怎么去构造的,它就会返回给我们实例
  • 集中管理,实现资源的可配置与易管理
  • 解耦

依赖注入(DI)

  • 依赖注入就是给某些需要自动装配的实例初始化值(默认单例
  • 通过set注入,property赋值
      public void setName(String name) {
          this.name = name;
      }
      <bean name="c" class="com.how2java.pojo.Category">
          <property name="name" value="category 1" />
      </bean>
  • 构造方法注入
    public UserService(UserDao userDao){
      this.userDao = userDao;
    };
    <bean id='userDao' class='com.**.UserDao'/>
    <bean id='userService' class='xxx'>
      <constructor-arg name='userDao' ref='userDao'/>
    </bean>
  • 注解
    @Autowird
    @Resource

AOP(切面编程)

  • 基于动态代理实现
  • 解耦
  • 提供声明式事务管理

使用场景

  • 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务
  • 所谓的周边功能,比如性能统计,日志,事务管理等等
  • 周边功能就是所说的切面

大概用法

  • 在service层配置component声明这是一个bean

    @Component("s")
    public class ProductService {
      public void doSomeService(){
          System.out.println("doSomeService");
      }
    }
  • Aspect声明是一个切面

  • Component声明是一个bean,由spring管理

  • Around(value = "execution(* com.how2java.service.ProductService.*(..))")声明对ProductService类所有方法进行切面操作

    @Aspect
    @Component
    public class LoggerAspect {
    
      @Around(value = "execution(* com.how2java.service.ProductService.*(..))")
      public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
          System.out.println("start log:" + joinPoint.getSignature().getName());
          Object object = joinPoint.proceed();
          System.out.println("end log:" + joinPoint.getSignature().getName());
          return object;
      }
    }
  • Object object = joinPoint.proceed();表示执行该方便,本例子的话会在执行前执行后都执行方法


https://blog.csdn.net/wolf_goat/article/details/81874862
https://blog.csdn.net/qq_21896123/article/details/79814817

全部评论

相关推荐

kl_我是东山啊:《相关公司:阿里巴巴》
投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务