学Spring的第一天

    科技2025-12-19  10

    Spring

    (1)Spring是什么? Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架 以 IoC- (Inverse Of Control:反转控制)和 AOP- (Aspect Oriented Programming:面向切面编程) 为内核(2)有什么特点? 提供了展现层 SpringMVC 持久层 Spring JDBC 还能整合开源世界众多著名的第三方框架和类库 业务层事务管理AOP 方便解耦,简化开发IOC Java源码是经典学习范例 逐渐成为使用最多的 Java EE 企业应用开源框架

    ioc

    ioc理论

    (1)什么是IOC 控制反转- (Inversion of Control,缩写为IoC) 》把原来new对象的这种方式转换成了,spring通过反射创建对象的方式 》spring创建完的对象放到一个容器中,谁需要就给谁注入进去- (获取对象并赋值给引用) 简单说:把创建对象和管理对象的权利交给spring public class XxxService{ private XxxDao dao ;//从spring容器去查找并赋值 }

    ioc理解

    ioc控制反转是通过Spring容器的getBean()方法来创建对象,而不是用户通过new来创建对象,Spring容器就像一个map集合,键:id 值:Object

    getBean():通过Spring容器的键获取对象,创建对象的原理是反射机制

    控制反转 1、spring读取配置文件,将扫描包路径下的Bean或配置在配置文件中的Bean 2、将这些Bean的类路劲通过key:id value:classpath 键值对方式管理 3、在需要用的地方通过getBean(id)实例化

    依赖注入

    (1)什么是依赖注入 DI (dependency injection) 依赖注入 含义:就是给对象的属性设置值. 原来给对象的属性设置值: set方法给对象设置值 构造方法给对象初始化的时候设置值. (2)property标签 set方式设置属性(掌握) 让spring调set方法,前提条件类中必须有set方法

    注解创建对象

    (1)对象比较多的话,开启注解扫描 (2)只有标记有注解的类,才会被创建对象且添加到ioc容器中 (3)四个注解

    @Component //其他层

    @Repository //Dao层

    @Service //Service层

    @Controller(“xxx”)//Controller层

    注解默认id首字母小写


    applicationContext.XML配置

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 使用注解方式进行创建对象 1.开启注解扫描 含义:开启注解扫描,指定了 base-package 扫描指定的包,扫描包中所有的类 查看类上是否有指定的注解, 如果类上有指定的注解,那么就创建给类对象, 放到spring容器中 --> <context:component-scan base-package="com.wzx.annotation"/> </beans>

    注入实现

    (1)注入是什么? 就是查找之后,进行赋值 (2)三种注入方式

    1 @Autowired @Qualifier(“bean的id”)

    2 @Value("#{bean的id}")

    3 @Resource(name=“bean的id值”)

    /* 第一种注入方式: * 注入UserDao的实现类 * @Autowired 自动注入,写在类的成员变量上, 可以根据UserDao接口,创建该接口的实现类,在自动的设置到该成员变量上 */ @Autowired private Userdao uerDao; /** * 第二种注入方式: * @Value("#{bean的id}") */ //@Value("#{userDaoImpl02}") //private UserDao dao; @Value("柳岩") private String name; /** * 第三种注入方式 : 是jdk的注解不是spring * @Resource(name="bean的id值") */ @Resource(name="userDaoImpl") private UserDao dao;

    代码实现

    1、导入依赖和配置配置文件

    依赖

    <!--日志包--> <!--日志包--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!--Spring 依赖--> <!-- spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.9.RELEASE</version> </dependency>

    配置文件 项目结构

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!--配置扫描路径--> <context:component-scan base-package="com.xy"/> </beans>

    2、编写测试类

    public class PersonServiceTest { private ClassPathXmlApplicationContext applicationContext; //日志类 private Logger logger = LoggerFactory.getLogger(PersonServiceTest.class); @Before public void init(){ applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); } @Test public void test01() { //获取参数 String name = "ywf"; String password = "123"; //调用service的方法查询是否存在该用户 PersonService personService = (PersonService) applicationContext.getBean("personServiceImp"); int i = personService.findPerson(new Person(name, password)); //根据返回值打印结果 logger.debug(i+""); if (i == 1) { System.out.println(i); logger.debug("登录成功"); } else { logger.debug("登录失败!"); } } }

    service层 要spring管理那个方法就在类加上注解

    @Service public class PersonServiceImp implements PersonService { @Autowired//自动注入dao类 private PersonDaoImp personDao; @Override public int findPerson(Person person) { int i = 0; i = personDao.findPersonByName(person.getName()); return i; } }

    dao层

    @Repository public class PersonDaoImp implements PersonDao { @Override public int findPersonByName(String name) { int i = 0; List list = new ArrayList(); list.add("ywf"); list.add("lyf"); list.add("wf"); if (list.indexOf(name) != -1) { i = 1; } return i; } }

    person类

    public class Person { private String name; private String password; public Person(String name, String password) { this.name = name; this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", password='" + password + '\'' + '}'; } }

    总结

    一定要在需要spring扫描管理的类上加上注解,不然会爆以下错误! 错误1

    Processed: 0.016, SQL: 10