学Spring的第一天

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配置





    
    



注入实现

(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.slf4jgroupId>
            <artifactId>slf4j-log4j12artifactId>
            <version>1.7.25version>
        dependency>
        <dependency>
            <groupId>log4jgroupId>
            <artifactId>log4jartifactId>
            <version>1.2.17version>
        dependency>


				
				
				<dependency>
						<groupId>org.springframeworkgroupId>
						<artifactId>spring-contextartifactId>
						<version>5.2.9.RELEASEversion>
				dependency>

配置文件
项目结构
学Spring的第一天_第1张图片


<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
学Spring的第一天_第2张图片

你可能感兴趣的:(spring,java,ioc)