zoukankan      html  css  js  c++  java
  • spring 学习

    https://repo.spring.io/release/org/springframework/spring/5.2.6.RELEASE/

    spring 下载地址

    spring test 报错 在Project Structure 的 Modules paths output  path 和 test output path 不一致

     spring xml 方式创建对象:有三种方式

    1.<bean id="p" class="com.gql.entity.Person"></bean> 无参构造

    2.<bean id="factory" class="com.gql.entity.BeanFactory" factory-method="getInstance"></bean静态工厂

      /** * * 类说明: * 模拟静态工厂 * @guoqianliang1998. */ public class BeanFactory { public static Person getInstance(){ return new Person(); } }

    3.<bean id="factory" class="com.gql.entity.BeanFactory"></bean> <bean id="f" factory-bean="factory" factory-method="getInstance"></bean>

    /** * * 类说明: * 模拟工厂实例化 * @guoqianliang1998. */ public class BeanFactory { public Person getInstance(){ return new Person(); } } 实例工厂(鸡肋)

    ioc 原理: 读取xml 、 工厂模式 、反射

    ioc 接口:Spring 提供IOC容器实现俩种方式:(俩个接口)

    1、BeanFactory:IOC容器基本实现,是Spring 内部的使用接口,不提供开发人员进行使用

    * 加载配置文件时不会创建对象,在获取对象(使用)才去创建对象。

    2、ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用

    *加载配置文件时候把配置文件对象进行创建

    3.ApplicationContext 有实现类

      

    FileSystemXmlApplicationContext  电脑目录下  全路径
    ClassPathXmlApplicationContext   项目src 目录下



    // User类 要有 set 方法
    <bean id="user" class="com.atguigu.spring5.User">
    <property name="name1" value="zhangsan"></property>
    </bean>
    // User类 要有 有参构造 方法
    <bean id="user" class="com.atguigu.spring5.User">
    <constructor-arg name="name1" value="123"></constructor-arg>
    </bean>

    // 引入约束 xmlns:p="http://www.springframework.org/schema/p"
    <bean id="user" class="com.atguigu.spring5.User" p:name1="111">
    </bean>

    // 设置空值
    <bean id="user" class="com.atguigu.spring5.User">
    <property name="name1" >
    <null/>
    </property>
    </bean>

    // 特殊符号
      1.把<>进行转义 &tls
      2.把带特殊符号内容写到CDATA
    <bean id="user" class="com.atguigu.spring5.User">
    <property name="name1" >
    <value><![CDATA[<<南京>>]]>
    </property>
    </bean>


    bean 和 FactoryBean

    1.如何设置单实例还是多实例

      在spring 配置中 scope =‘prototype’ 多实例   simgleton 单实例

           scope =simgleton  在加载配置文件就创建对象

      scope =‘prototype’ 在getBean 的时候创建对象

    ICO操作Bean 管理(bean生命周期)

     (1) 通过构造器创建bean实例(无参构造)

    (2)为bean 的属性设置值和对其他bean的引用(调用set方法)

    (3)调用bean的初始化方法(需要配置初始化的方法)

    (4)bean可以使用了(对象获取到了)

    (5)当容器关闭时候,调用bean的摧毁方法(需要进行配置摧毁的方法)

    1.什么是自动装配(根据)

     autowire 属性常用俩个值:

      byName 根据属性名称注入,注入值bean的id 值和类属性名称一样

    private Dept dept;
    <bean id="user" class="com.atguigu.spring5.User" autowire="byType">
    </bean>
    <bean id="dept" class="com.atguigu.spring5.Dept"></bean>

      byType 根据属性类型注入,

    <bean id="user" class="com.atguigu.spring5.User" autowire="byType">
    <bean id="dept" class="com.atguigu.spring5.Dept"></bean>


    spring 引入 properties 文件
    xmlns:context="http://www.springframework.org/schema/context"
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    例子:<bean id="user" class="com.atguigu.spring5.User" autowire="byName">
       </bean>
      <bean id="dept" class="com.atguigu.spring5.Dept">
       <property name="driver" value="${prop.drive}"></property>
      </bean>
      <context:property-placeholder location="classpath:jdbc.properties"/>


    IOC操作Bean
       1.什么是注解





    1. 使用注解目的:简化xml配置

    2、Spring 针对Bean 管理中创建对象提供注解
    (1)@Component
    (2)@Service
    (3)@Controller
    (4)@Repository 持久成 dao

    • 上面四个注解功能都是一样的

    3.基于注解实现对象创建
    第一步,引入aop依赖
    spring-aop-*。jar
    第二步,开启组件扫码
    <context:component-scan base-package="com.atguigu.spring5.testdemo"></contex
    第三步,
    在注解里面value属性值可以省略不写,默认组是类名称,首字母小写 等价于 bean 注入的id
    @Compent(value=userService)

    4.基于注解方式实现属性注入
    (1)@Autowired :根据属性类型进行自动装配 Interface UserDao (这个类型) 是他的实现类
    (2)@Qualifier:根据属性名称进行注入 和上面@Autowired 一起使用,一般默认首字母小写
    (3)@Resource:可以根据类型注入,可以根据名称注入
    (4)@Value :普通类型注入

    @Repository(value = "UserDaoImpl1")
    public class UserDaoImpl implements UserDao{
    @Override
    public void add() {
    System.out.println("add++++");
    }
    }
    @Service
    public class UserService {

    @Autowired
    @Qualifier(value = "UserDaoImpl1")
    private UserDao userDao;
    
    public void add(){
        System.out.println("service add+++++");
        userDao.add();
    }
    

    }

    5.完全注解开发
    (1)创建配置类,代替xml配置文件
    @Configuration // 配置类,代替配置文件
    @ComponentScan(basePackages = {"com.atguigu"})
    public class SpringConfig {
    }
    (2)编写测试类
    @Test
    public void testAdd(){
    // 1.加载spring配置文件
    ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
    UserService userService = context.getBean("userService", UserService.class);
    userService.add();
    System.out.println( userService);
    }

    6.AOP
    1、连接点
    类里面那些方法可以被增强,这些方法称为连接点
    2、切入点
    实际被真正增加的方法,称为切入点
    3.通知(增强)
    (1)实际增加的逻辑部分称为通知(增强)
    (2)通知有多种类型
    前置通知
    后置通知
    环绕通知
    异常通知
    最终通知
    4.切面
    是动作
    (1)把通知应用到切入点过程

    @Before(value = "execution(* com.atguigu.spring5.aopanno.User.add(..))")
    public void before(){
    System.out.println("before....");
    }

    5.相同切入点抽取
    @Pointcut(value = "execution(* com.atguigu.spring5.aopanno.User.add(..))")
    public void pointDemo(){

    }
    @Before(value = "pointDemo()")
    public void before(){
        System.out.println("before....");
    }
    

    6.有多个增强类同一个方法增强,优先级
    @Order(1) 数值越小 优先级越高

    把不是spring管理的类 注入到容器中
    1.创建GenericApplicationContext对象
    GenericApplicationContext context = new GenericaApplicationContext();
    2.调用context 的方法对象注册
    context.refresh();
    context.registerBean(User.class,()->new User());
    3.获取在spring 注册的对象
    User user = (User)context.getBean("com.atigugu.spring5.text5.User");

  • 相关阅读:
    2021上半年下午第二题
    21年软件设计师上半年下午试题一
    软考下午第三题-用例图和类图
    类图
    用例图-包含、扩展、泛化
    软考下午题二------数据库设计
    软件设计师下午题-数据流图
    IP练习题
    2020软件工程作业02
    2020软件工程作业01
  • 原文地址:https://www.cnblogs.com/adai-study-1030/p/14315428.html
Copyright © 2011-2022 走看看