springioc

spring基础之-0-初识spring框架

一、什么是spring框架?

包括 ioc(inverse of controll) 控制反转和 aop(aspect oriented programming):面向切面编程;

具体来说,spring提供了许多服务/技术:springmvc、spring jdbcTemplate 、spring security、service level transaction manager

二、搭建 spring 框架

  • idea 搭建

  • eclipse搭建

三、spring 配置文件

1、bean的 生命周期

bean 的生命周期描述
singleton默认;单例模式;在配置文件加载时创建一次
prototype多例模式;在使用时(getBean)创建实例
requestweb
sessionweb
applicationweb

2、bean 的 生命周期函数(不重要)

  • init-method

    
    
  • destroy-method

3、注入bean的各种方法

3.1、无参构造【常用】
<!--  注入bean方法1:无参构造 开始 -->
<bean id="userDao1" class="org.jnr.dao.impl.DaoImpl" scope="prototype" init-method="init"
      destroy-method="destroy"></bean>
<!--  注入bean方法1:无参构造 结束 -->
3.2、有参构造
<!--  注入bean方法2:有参构造  开始 -->
<bean id="userDao2" class="org.jnr.dao.impl.DaoImpl">
    <constructor-arg name="num1" value="1"/>
    <constructor-arg name="num2" value="2"></constructor-arg>
</bean>
<!--  注入bean方法2:有参构造  结束 -->
3.3、set构造
<!--  注入bean方法3:set构造  开始-->
<bean id="userDao3" class="org.jnr.dao.impl.DaoImpl">
    <property name="num1" value="2"></property>
</bean>
<!--  注入bean方法3:set构造  结束-->
3.4、静态工厂构造
<!--  注入bean方法4:静态工厂构造  开始-->
<bean class="org.jnr.factory.StaticFactory" id="userDao4" factory-method="getUserDao"></bean>
<!--  注入bean方法4:静态工厂构造  结束-->
3.5、动态工厂构造
  <!--  注入bean方法5:动态工厂构造 开始 -->
    <!-- 需要先有工厂实例 -->
    <bean id="dynamicFactory" class="org.jnr.factory.DynamicFactory"></bean>
    <bean class="org.jnr.factory.DynamicFactory" id="userDao5" factory-bean="dynamicFactory"
          factory-method="getUserDao"></bean>
    <!--  注入bean方法5:动态工厂构造 结束 -->
3.6、@Value注入属性值【常用】
  • 先编写属性类

    @Component
    public class PropertiesConfig {
        @Value("1")
        private Integer id;
        @Value("张三")
        public String name;
    
        public String getName() {
            return name;
        }
    
        public Integer getId() {
            return id;
        }
    }
    
  • 在 applicationContext.xml 配置文件中 扫描以上包

     <context:component-scan base-package="org.jnr.pojo,org.jnr.entity,org.jnr.config"/>
    
  • 在需要使用属性的bean中使用(该类同样需要被扫描,被spring ioc 接管)

    @Component("pojo")
    public class Pojo implements Serializable {
        private static final long serialVersionUID = -6849794470754667710L;
       
        //注入上面配置的属性bean
        @Autowired
        private PropertiesConfig propertiesConfig;
    
        //给本类的属性注入值,采用SpringEl 表达式写法
        @Value("#{propertiesConfig.id}")
        private Integer id1;
        @Value("#{propertiesConfig.name}")
        private String name1;
    }
    
3.7、配置文件注入属性值【常用】
  • 读取 properties文件,可以分析源码发现是以 ISO-8859-A 编码读取的,会造成中文乱码;但是yml文件是以 utf-8编码的不会乱码,因此使用properties文件时导入文件需要指定编码格式,下面两种方式都可以

  • //第一种方式
    @PropertySource(value="classpath:application.properties", encoding="UTF-8")
    
  • <!-- 第二种方式 -->
    <context:property-placeholder location="classpath:application.properties" file-encoding="UTF-8" ignore-unresolvable="true"/>
    
  • 使用(该类同样需要被扫描,被spring ioc 接管)

    //这里采用第一种方式,注解加载 properties文件并设置文件 编码
    @PropertySource(value="classpath:application.properties", encoding="UTF-8")
    
    //加入 spring ioc 容器
    @Component("pojo")
    public class Pojo implements Serializable {
        private static final long serialVersionUID = -6849794470754667710L;
    
        //注入属性值
        @Value("${pojo.id}")
        private Integer id;
        
         //注入属性值
        @Value("${pojo.name}")
        private String name;
    }
    
3.8 、其他

### 4、依赖注入

4.1、set 注入
4.1.1、注入方式
  • 常用方式

  • p命名空间

4.1.2 注入类型
  • 引用类型

    • <property name="user" ref="user"/>
      
  • 普通类型

    • <property name="id" value="1"/>
      <property name="name" value="Zhuzhu康"/>
      
  • 集合类型

      • <property name="strMap">
                   <map>
                       <entry key="1" value="1"/>
                       <entry key="2" value="str2猪猪"/>
                   </map>
        </property>
        
      • <property name="userMap">
                   <map>
                       <entry key="1" value-ref="user"/>
                   </map>
        </property>  
        
      • <property name="userList">
                   <list>
                       <ref bean="user"/>
                   </list>
        </property>
        
      • <property name="strList">
            <list>
                <value>1</value>
                <value>2</value>
                <value>3</value>
            </list>
        </property>
        
      • <property name="strArray">
            <array>
                <value>1</value>
                <value>2</value>
                <value>3</value>
            </array>
        </property>
        
      • <property name="props">
            <props>
                <prop key="1">1</prop>
                <prop key="2">2</prop>
                <prop key="3">3</prop>
                <prop key="4">4</prop>
            </props>
        </property>
        
4.2、构造方法注入

一个参数对应一个

5、spring 导入配置文件(注解或xml),然后可以在xml中或者被容器管理的bean实例中使用 (通过 Spring Expression Language 、@Value注解实现)

5.1、xml方式 --注意,context:property-placeholder 只能使用一次

<context:property-placeholder=“classpath:xxx.properties” file-encoding=“utf-8”/>

5.2、annotation方式 --注意,与上面不同的是,这里的注解可以使用多次,即可以加载多个配置文件(当然了,一个类只能对应一个注解,你想要多个注解的话需要多个类),另外,要使用注解,必须该类已经被 springioc容器所管理,不然是无效的。

@PropertySource(value=“xxx.properties”,encoding=“UTF-8”)

6、spring El 表达式

代补充

四、spring 相关 API、源码

ClassPathXmlApplicationContext :通过 类加载路径加载配置文件

FileSystemXmlApplicationContext :通过文件系统加载配置文件

AnnotationConfigApplicationContext:通过注解加载配置文件

五、spring注解

1、原始注解(之前的注解,主要适用于 bean)

@Scope

@Async

@Aspect

@AutoWired

@Resource

@Qualifier

@Post

@PostConstructor

@PreDestory

@EnableAsync

2、新增的注解(主要用于管理 配置类bean)

@Import

@Bean

@PropertySource

@ComponentScan

@Configuration

3、spring集成junit4 注解

@RunWith(SpringJunit4ClassRunner)

@ContextConfiguration(location=“applicationContext配置文件”)

@Test

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值