1.bean的方式说明

    作用:

       用于配置对象让spring来创建的。

     默认情况下它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建成功。

    属性:

    id:给对象在容器中提供一个唯一标识。用于获取对象。

     name:如果一个bean只配置了name属性,但是没有配置ID属性,默认会ID属性=name属性 name定义的是bean的alias,可以有多个,并可能与其他的bean重名。

     class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。

       scope:指定对象的作用范围。

    * singleton :默认值,单例的.

                * prototype :多例的.

    * request   :WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中.

                * session   :WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中.

                * globalSession :WEB项目中,应用在Portlet环境.如果没有Portlet环境那么globalSession相当于session.

      init-method:指定类中的初始化方法名称。

       destroy-method:指定类中销毁方法名称。

  2.bean的作用范围和生命周期

   单例对象:scope="singleton"

    一个应用只有一个对象的实例。它的作用范围就是整个引用。

    生命周期:

对象出生:当应用加载,创建容器时,对象就被创建了。

对象活着:只要容器在,对象一直活着。

对象死亡:当应用卸载,销毁容器时,对象就被销毁了。

   多例对象:scope="prototype"

      每次访问对象时,都会重新创建对象实例。

      生命周期:

对象出生:当使用对象时,创建新的对象实例。

对象活着:只要对象在使用中,就一直活着。

对象死亡:当对象长时间不用时,被java的垃圾回收器回收了。

3.实例化Bean的方式(xml,注解)

第一种方式:使用默认无参构造函数<!--在默认情况下:它会根据默认无参构造函数来创建类对象。如果bean中没有默认无参构造函数,将会创建失败。 -->
<bean id="customerService" class="com.itheima.service.impl.CustomerServiceImpl"/>第二种方式:spring管理静态工厂-使用静态工厂的方法创建对象
/*** 模拟一个静态工厂,创建业务层实现类*/
public class StaticFactory {    public static ICustomerService createCustomerService(){return new CustomerServiceImpl();}
}
<!-- 此种方式是:使用StaticFactory类中的静态方法createCustomerService创建对象,并存入spring容器id属性:指定bean的id,用于从容器中获取class属性:指定静态工厂的全限定类名factory-method属性:指定生产对象的静态方法-->
<bean id="customerService" class="com.itheima.factory.StaticFactory" factory-method="createCustomerService"></bean>第三种方式:spring管理实例工厂-使用实例工厂的方法创建对象
/*** 模拟一个实例工厂,创建业务层实现类* 此工厂创建对象,必须现有工厂实例对象,再调用方法*/
public class InstanceFactory {    public ICustomerService createCustomerService(){return new CustomerServiceImpl();}
}<!-- 此种方式是:先把工厂的创建交给spring来管理。然后在使用工厂的bean来调用里面的方法factory-bean属性:用于指定实例工厂bean的id。factory-method属性:用于指定实例工厂中创建对象的方法。--><bean id="instancFactory" class="com.itheima.factory.InstanceFactory"></bean><bean id="customerService" factory-bean="instancFactory" factory-method="createCustomerService"></bean>

xml配置方式

<!-- 告知spring框架在,读取配置文件,创建容器时,扫描注解,依据注解创建对象,并存入容器中 --><context:component-scan base-package="com.itheima"></context:component-scan>
<!--1111111111111111111111111111111111111111111111111-->他们三个注解都是针对@Component的衍生注解,他们的作用及属性都是一模一样的。
他们只不过是提供了更加明确的语义化。@Controller:一般用于表现层的注解。@Service:一般用于业务层的注解。@Repository:一般用于持久层的注解。
细节:如果注解中有且只有一个属性要赋值时,且名称是value,value在赋值是可以不写。

注解配置方式

  4.spring依赖注入数据(xml,注解)

<!--  使用xml时可以通过配置构造方法和利用set方法注入的属性的值,可以是基本数据类型,引用类型,map,list等 -->
<!-- 通过配置文件给bean中的属性传值:使用set方法的方式涉及的标签:property属性:name:找的是类中set方法后面的部分ref:给属性赋值是其他bean类型的value:给属性赋值是基本数据类型和string类型的实际开发中,此种方式用的较多。
-->
<bean id="customerService" class="com.itheima.service.impl.CustomerServiceImpl"><property name="name" value="test"></property><property name="age" value="21"></property><property name="birthday" ref="now"></property>
</bean><bean id="now" class="java.util.Date"></bean><!--111111111111111111111111111111111111111-->
<!-- 注入集合数据 List结构的:array,list,setMap结构的map,entry,props,prop
-->
<bean id="customerService" class="com.itheima.service.impl.CustomerServiceImpl"><!-- 在注入集合数据时,只要结构相同,标签可以互换 --><!-- 给数组注入数据 --><property name="myStrs"><set><value>AAA</value><value>BBB</value><value>CCC</value></set></property><!-- 注入list集合数据 --><property name="myList"><array><value>AAA</value><value>BBB</value><value>CCC</value></array></property><!-- 注入set集合数据 --><property name="mySet"><list><value>AAA</value><value>BBB</value><value>CCC</value></list></property><!-- 注入Map数据 --><property name="myMap"><props><prop key="testA">aaa</prop><prop key="testB">bbb</prop></props></property><!-- 注入properties数据 --><property name="myProps"><map><entry key="testA" value="aaa"></entry><entry key="testB"><value>bbb</value></entry></map></property>
</bean>xml注入属性

xml注入属性

@Autowired
作用:               默认是按照byType进行注入的,如果发现找到多个bean,则,又按照byName方式比对,如果还有多个,则报出异常。
@Qualifier
作用:@Qualifier("XXX")中的 XX是 Bean 的名称,所以 @Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了;但是给方法参数注入时,可以独立使用。
属性:value:指定bean的id。
@Resource
作用:@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。 @Resource装配顺序 1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常 2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常 3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常 4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
属性:name:指定bean的id。
@Value
作用:注入基本数据类型和String类型数据的
属性:value:用于指定值
@Scope
作用:指定bean的作用范围。
属性:value:指定范围的值。取值:singleton  prototype request session globalsession
@PostConstruct
作用:用于指定初始化方法。
@PreDestroy
作用:用于指定销毁方法。

注解配置属性

 5.spring的纯注解配置

/*** 客户的业务层实现类*/
@Configuration//表明当前类是一个配置类
@ComponentScan(basePackages = "com.itheima")//配置要扫描的包
public class SpringConfiguration {
}那么新的问题又来了,我们如何获取容器呢?
public class Client {public static void main(String[] args) {//1.获取容器:由于我们已经没有了xml文件,所以再用读取xml方式就不能用了。//这时需要指定加载哪个类上的注解ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);//2.根据id获取对象ICustomerService cs = (ICustomerService) ac.getBean("customerService");cs.saveCustomer();}
}

java案例

@Configuration
作用:用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解。获取容器时需要使用AnnotationApplicationContext(有@Configuration注解的类.class)。属性:value:用于指定配置类的字节码示例代码:/*** 用于初始化spring容器的配置类*/@Configurationpublic class SpringConfiguration{}@ComponentScan
作用:用于指定spring在初始化容器时要扫描的包。作用和在spring的xml配置文件中的:<context:component-scan base-package="com.itheima"/>是一样的。属性:basePackages:用于指定要扫描的包。和该注解中的value属性作用一样。@PropertySource
作用:用于加载.properties文件中的配置。例如我们配置数据源时,可以把连接数据库的信息写到properties配置文件中,就可以使用此注解指定properties配置文件的位置。属性:value[]:用于指定properties文件位置。如果是在类路径下,需要写上classpath:@Import
作用:用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration注解。当然,写上也没问题。属性:value[]:用于指定其他配置类的字节码。示例代码:@Configuration@ComponentScan(basePackages = "cn.itcast.spring")@Import({ Configuration_B.class})public class Configuration_A {}@Configuration@PropertySource("classpath:info.properties")public class Configuration_B {}@Bean
作用:该注解只能写在方法上,表明使用此方法创建一个对象,并且放入spring容器。它就相当于我们之前在xml配置中介绍的factory-bean和factory-method。属性:name:给当前@Bean注解方法创建的对象指定一个名称(即bean的id)。示例代码:@Bean(name = "datasource2")public DataSource createDS() throws Exception {ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();comboPooledDataSource.setUser("root");comboPooledDataSource.setPassword("1234");comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");comboPooledDataSource.setJdbcUrl("jdbc:mysql:///spring_ioc");return comboPooledDataSource;}

注解说明

转载于:https://www.cnblogs.com/codeLei/p/9315268.html

spring 基本配置学习相关推荐

  1. spring boot框架学习学前掌握之重要注解(2)-通过java的配置方式进行配置spring

    本节主要内容: 1:通过代码演示实现零XML配置spring 2:使用重点注解理解 声明: 本文是<凯哥陪你学系列-框架学习之spring boot框架学习>中spring boot框架学 ...

  2. Spring中定时任务Quartz集群配置学习

    Spring中定时任务Quartz集群配置学习 原来配置的Quartz是通过spring配置文件生效的,发现在非集群式的服务器上运行良好,但是将工程部署到水平集群服务器上去后改定时功能不能正常运行,没 ...

  3. 【Spring学习】spring动态配置多数据源

    这段时间在做智能导航的管理系统--运维系统,涉及到连接多个数据库的问题.因为运维系统要用到智能导航的一些功能,我们目前只是简单的将智能导航整合到运维系统中:运维系统有一个自己的数据库,导航也有自己的数 ...

  4. SpringBoot学习笔记-2:第二章 Spring Boot 配置

    第二章 Spring Boot 配置 1.YAML 配置 SpringBoot 全局配置文件 application.properties application.yml YAML 以数据为中心,比 ...

  5. Spring学习二创建对象,Spring的配置,Bean注入方式

    **1.Spring Ioc**创建对象的方式 构造方法创建对象: 1.使用无参构造创建对象,是默认实现: 2.若使用有参构造创建对象,则: 补充一个,导入junit包 <dependency& ...

  6. Spring源码学习第七天==>解析配置注解类与BPP

    关键词: Spring解析配置类注解Bean Spring注册Bean后置增强器(BPP) Spring消息资源和监听器的初始化 一:Spring解析配置类注解Bean==>Configurat ...

  7. Spring Boot配置文件学习记录【1】

    [1]Spring Boot配置文件 Spring Boot配置层面的知识已学习完.总结一下本周的学习内容,一切都需要从@SpringBootApplication谈起,因为它,做到了真正配置文件的简 ...

  8. Spring Boot 配置元数据指南

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 遗失的拂晓 来源 | 公众号「锅外的大佬」 1. 概览 在编写 Spring Bo ...

  9. spring cloud 配置中心

    1. spring cloud配置中心server 1.1 创建git仓库 首先在github上搭建一个存储配置中心的仓库,需要创建两个分支,一个是master,一个是dev分支.自己学习可以用公开库 ...

最新文章

  1. win7调整屏幕亮度_番禺区户外LED屏幕求购,区LCD屏幕解决方案
  2. 管理敏捷迭代任务和任务协作
  3. Spring导入配置类或文件
  4. Struts1.x系列教程(5):HTML标签库
  5. Linux -Ubuntu安装 Tomcat
  6. ibiliplayer是什么_Bilibili视频播放页面接口整理(不定期更新)
  7. linux应用小技巧
  8. java char i=2+#039;2#039;;_图说String(三)String中#039;+#039;和StringBuilder的区别
  9. RocketMQ 一行代码造成大量消息发送失败
  10. 国内外cms网站大全
  11. SSM项目实战之十四:分页实现
  12. SIM868模块+Arduino将位置信息上传到服务器
  13. .axf文件_Jlink使用技巧之单独下载HEX文件到单片机
  14. 文件系统FatFsR0.09a翻译(三):ff.h
  15. css 模拟手机充电水滴效果
  16. A JNI error has occurred, please check your installation and try again
  17. servlet3 文件上传
  18. md格式 linux,Linux命令基本格式以及文件处理命令.md
  19. sort和sortby的区别:
  20. 如何将带Dxperience组件的Asp.net 2.0网站部署到服务器(转载)

热门文章

  1. apache synapse使用(1)
  2. Bochs安装FreeDOS与调试
  3. Python 并发编程之使用多线程和多处理器
  4. 浅谈redis数据库的键值设计
  5. 《Java编程思想》学习笔记9——集合容器高级
  6. golang逃逸分析
  7. linux命令more
  8. 大型网站核心架构要素--性能
  9. 动态规划之等差递减区间个数
  10. 嵌入式编程C语言提高代码效率的14种方法