Spring学习一(依赖注入/Bean/注解等)

  • 1.Spring依赖注入的方式。
  • 2.依赖注入的类型
  • 3.Bean的作用域
  • 4.自动注入
  • 5.使用注解的方式
  • 6.在spring配置文件中引入属性文件

1.Spring依赖注入的方式

  平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理。

  spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”。

  通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做。

  Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方 法注入,set方法参数注入,接口注入,这里我们先运用构造方法注入,set方法参数注入

1.1通过set方法完成依赖注入

建好实体类Hello并生成set方法

private String name;
private Integer age;

在配置文件中写入代码以完成set方法依赖注入

<bean id="he" class="com.zhiyou100.spring.Hello">
    <property name="name" value="地方大师傅"/>
    <property name="age" value="33"/>
</bean>

写好测试类进行测试

1 public class Test {
2     public static void main(String[] args) {
3         ApplicationContext app=new ClassPathXmlApplicationContext("app.xml");
4         Hello hh = (Hello) app.getBean("he");
5         System.out.println(hh);
6     }
7 }

结果输出

一般我们建议使用set方法进行依赖注入

1.2通过构造方法注入

在上面的实体类中生成构造方法三种,无参,单参和全参

//无参
public Hello() {
    super();
}
//单参
public Hello(String name) {
    super();
    this.name = name;
}
//全参
public Hello(String name, Integer age) {
    super();
    this.name = name;
    this.age = age;
}

在配置文件中进行依赖注入,其中传入两个参则寻找上面两个参的,一个则寻找单参的

<bean id="he2" class="com.zhiyou100.spring.Hello">
    <constructor-arg index="0" value="李四"/>
    <constructor-arg index="1" value="13"/>
</bean>

进行测试

1 public class Test {
2     public static void main(String[] args) {
3         ApplicationContext app=new ClassPathXmlApplicationContext("app.xml");
4         Hello hh = (Hello) app.getBean("he2");
5         System.out.println(hh);
6     }
7 }

测试结果为,依赖注入成功

2.依赖注入的类型

基本数据类型和字符串 使用value属性,如果是引入的对象类型则使用ref属性

在上面实体类的基础上加入新属性类型

private Student student;
private List<String> list;
private Map<Integer, String> map;

对应的student实体类为

 1 public class Student {
 2     private String addr;
 3     public String getAddr() {
 4         return addr;
 5     }
 6     public void setAddr(String addr) {
 7         this.addr = addr;
 8     }
 9     @Override
10     public String toString() {
11         return "Student [addr=" + addr + "]";
12     }
13 }

编写配置代码

 1 <bean id="he" class="com.zhiyou100.spring.Hello">
 2         <property name="name" value="地方大师傅"/>
 3         <property name="age" value="33"/>
 4         <property name="student" ref="stu"/>
 5         <property name="list">
 6             <list>
 7                 <value>琼恩雪诺</value>
 8                 <value>史塔克三萨</value>
 9                 <value>提里昂</value>
10             </list>
11         </property>
12         <property name="map">
13             <map>
14                 <entry key="1" value="啊啊啊"/>
15                 <entry key="2" value="事实上"/>
16                 <entry key="3" value="顶顶顶"/>
17             </map>
18         </property>
19     </bean>
20
21     <bean id="stu" class="com.zhiyou100.spring.Student">
22         <property name="addr" value="温哥华"/>
23     </bean> 

编写测试代码,进行测试:

1 public class Test {
2     public static void main(String[] args) {
3         ApplicationContext app=new ClassPathXmlApplicationContext("app.xml");
4         Hello hh = (Hello) app.getBean("he");
5         System.out.println(hh);
6         System.out.println(hh.getMap());
7     }
8 }

测试成功后如下所示

3.Bean的作用域
  Bean的作用域默认为单例模式

  scope:表示bean的作用域,默认singleton, struts框架要求非单例

  prototype:原生,非单例

<bean id="he" class="com.zhiyou100.spring.Hello" scope="prototype"/>

4.自动注入

新建两个实体类UserDao和UserService

public class UserDao {
    private String uname;
    public String getUname() {
        return uname;
    }
    public void setUname(String uname) {
        this.uname = uname;
}
public class UserService {
    private UserDao userDao;
    public UserDao getUserDao() {
        return userDao;
    }
    public void setUserDao(UserDao userDao) {
        System.out.println("setUserDao");
        this.userDao = userDao;
    }
}

xml配置文件代码,其中userservice使用自动依赖注入autowire="byName"对于此属性的其他解释

byType:根据userDao属性的类型,找与之匹配的bean

private UserDao userDao;

byName :根据属性名找与之匹配的bean的id

no:需要手动注入

default :采取全局的default- autowire没置

<bean id="userDao" class="com.zhiyou100.spring.UserDao"/>

<bean id="userservice" class="com.zhiyou100.spring.UserService" autowire="byName"/>

编写测试

public class UserTest {
    public static void main(String[] args) {
        ApplicationContext app=new ClassPathXmlApplicationContext("appUser.xml");
    }
}

测试结果为

5.使用注解的方式

1. 引入jar包  aop的jar包

2. 配置文件中使用包扫描。

<context:component-scan base-package="com.zhiyou100.zhl"/>

3. 在相应的类上加上注解.

@Repository  持久化注解。

@Service       业务层注解

@Controller   控制层注解

@Autowired   自动注入 按照类型帮你自动注入,如果由多个类型相同的那么就会在按照名称注入。(建议使用这个)

@Resouce     自动注入 按照名称注入,如果没有相同名称的bean那么会按照类型帮你注入。 它可以指定名称来注入。

6.在spring配置文件中引入属性文件

1 <context:property-placeholder location="classpath:my.properties"/>
2 <bean id="users" class="com.zhiyou100.spring.Users">
3     <!-- ${user.name}这个属性会打印电脑的用户名 -->
4     <property name="name" value="${users.name}"></property>
5     <property name="age" value="${users.age}"></property>
6     <property name="address" value="${users.address}"></property>
7 </bean>
users.name=zzzz
users.age=55
users.address=asdasd

测试结果为

若使用user.name这个属性会打印电脑的用户名,将上面的代码不变,改变这一条后测试结果为

原文地址:https://www.cnblogs.com/murmansk/p/11478579.html

时间: 2024-08-28 20:33:47

Spring学习一(依赖注入/Bean/注解等)的相关文章

spring学习笔记-依赖注入

学习过程访问的地址,按顺序理解: [email protected]注解与自动装配 spring四种依赖注入方式 Spring注解注入 <context:component-scan>使用说明 详细:Spring零配置通过注解实现Bean依赖注入总结

Spring学习——DI(依赖注入)

IOC容器,处理对象依赖关系 IOC与DI: IOC :是一个容器,创建对象的容器 DI :在容器创建对象后,处理对象的依赖关系,也叫依赖注入! 方式1:通过set方法注入值 可以给普通属性.集合属性注入值: 1. 必须提供set方法 2. 配置中通过bean的property子节点,给对象属性注入值: 1 <!-- 2 依赖注入,即处理对象的依赖关系!给对象的属性设置值! 3 --> 4 <!-- 1) 给对象属性赋值(通过构造函数)--> 5 <bean id="

Spring学习(一)---依赖注入和控制反转

Spring Spring是一个从实际开发中抽出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的开发效率. Spring为企业应用的开发提供了一个轻量级的解决方案.该解决方案包括:基于依赖注入的核心机制.基于AOP的声明事务管理.与多种持久层技术的整合,以及优秀的Web MVC框架等. 使用Spring管理Bean Spring核心容器就是一个超级大工厂,所有的对象(包括数据源.Hibernate SessionFactory等基础性资

spring学习 五 依赖注入的方式

依赖注入有两种方式: 1 构造注入,如果<bean>标签下使用<contructor-arg>,则是构造注入 2 setter注入,就是调用setter方法注入,如果<bean>标签下使用<property>标签,就是setter注入 2.1: 如果属性是基本数据类型或 String 等简单类型 <bean id="peo" class="com.bjsxt.pojo.People"> <proper

spring 四种依赖注入方式以及注解注入方式

平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化, 而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员, 而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做. spring有多种依赖注

spring四种依赖注入方式 (set,构造器,工厂,注解 )

平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是"控制反转",通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做. spring有多种

Spring的几种注入bean的方式

在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入  这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式).   使用属性的setter方法注入 首先要配置被注入的bean,在该bean对应的类中,应该有要注入的对象属性或者基本数据类型的属性.例如:为UserBiz类注入UserDAO,同时为UserBiz注入基本数据类型String,那么这时,就要为UserDAO对象和String类型设置setter方法.,用于进行依赖注

JavaEE开发之Spring中的依赖注入与AOP编程

一.快速创建Mava管理的Spring工程 因为本篇博客是讨论关于Spring的东西,所以我们就不创建WebApp的工程了.我们使用Spring来快速的创建一个Maven管理的工程.如下所示找到File->New->Maven Project选项来创建一个新的Maven Project,具体如下所示: 下方我们选择创建一个简单的Maven工程,跳过模板的选择.上篇博客我们在创建Maven工程时,是没有选择下方这个选项的,然后我们选择了一个WebApp的模板.而本篇博客,我们不需要WebApp的

spring四种依赖注入方式

平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是"控制反转",通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做. spring有多种