spring入门及注解开发

目录

1.核心概念

 2.Bean标签

 3.数据注入

4.加载properties文件

5.获取spring容器

6.注解开发Bean

7.注解的数据注入


1.核心概念

  • IoC ( Inversion of Control ) 控制反转:把对象的创建控制权由程序转移到外部,这种思想称为控制反转(spring中就提供了这种容器,也叫ioc容器 统称为Bean)。
  • DI ( Dependency Injection ) 依赖注入:在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入。
  • AOP(Aspect Oriented Programming)面向切面编程:简单来说就是分离一个事件的前后,例如数据库查询这件事,先连接数据库,然后查询我们所需要的数据,最后关闭数据库。查询数据这件事就是一个切点,切点前后就是切面,连接数据库和关闭数据库服务了我们查询数据这个操作。
  • Spring就是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,主要是为了简化大型应用开发的复杂性而诞生的。
  • 引入spring
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>

 2.Bean标签

  • id 属性:声明该bean的id,该id在整个配置文件中唯一

  • name 属性:声明该bean的名称,可以有多个值,利于访问

  • class 属性:声明该bean的class对象类型,输入值为类的完整名称

  • scope属性:声明bean的作用范围

    • singleton : 单例,由spring保证该bean在整个spring容器中只存在一个对象实例;

    • prototype: 非单例,每次使用都将创建一个新的对象;

  • property子标签:用于解耦合,就是不需要new一个对象,name属性就是对象,ref属性就是类名。也可以使用autowire="byType"自动装配,可以通过类型,name等自动装配

<bean id="bookServer" class="com.pack.BookServer" scope="singleton">
        <property name="daoimpl" ref="bookDaoimpl"/>
    </bean>

这里放一张图解释一下

 3.数据注入

  • 简单类型
    <bean id="bookDao" class="com.pack.BookDaoImpl">
        <property name="databaseName" value="mysq1"/>
        <property name="connectionNum" value="10"/>
    </bean>
<!--构造器注入-->
<constructor-arg index="0" value=""></constructor-arg>
<constructor-arg index="1" value=""></constructor-arg>

 把mysql赋值给类中databaseName这个变量

  • 引用类型
   <bean id="bookService" class="com.pack.BookServiceImpl">
        <property name="bookDao" ref="bookDao"/>
        <property name="userDao" ref="userDao"/>
    </bean>

引用bookDao这个Bean赋值给类中bookDao这个变量

4.加载properties文件

jdbc.properties文件内容

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc :mysql://127.0.0.1:3306 / spring_dbjdbc.username=root
jdbc.password=root

 使用location加载文件,开发中最好用"classpath*:*.properties"加载全部properties,也可以选择加载指定文件。加载完成后就可以用占位符来获取相应的值。

5.获取spring容器

        //具有关闭Bean的方法close()
//        ClassPathXmlApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml");
//        ctx.registerShutdownHook();//设置关闭钩子
ApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml"); 
 BookDaoimpl dao= (BookDaoimpl) ctx.getBean("dao");
 dao.save();

6.注解开发Bean

@Component:通用的bean定义

@Controller:用于表现层bean定义
@service :用于业务层bean定义

@Repository :用于数据层bean定义
利用Bean配置类完全替换配置文件

@Configuration  //Bean配置
@ComponentScan("com.pack") //扫描
@PropertySource("jdbc.properties")//加载properties文件,不能使用*号,用数组
@Import(jdbcConfig.class)//导入Bean配置类
public class Springconfig {
}
@Component("dao")
@Scope("singleton")  //prototype
public class BookDaoimpl {

    public void save(){
        System.out.println("存储");
    }

//生命周期
    @PostConstruct
    public void init(){
        System.out.println("初始化");
    }
    @PreDestroy
    public void destroy(){
        System.out.println("销毁");
    }
}

7.注解的数据注入

@Service  //可以指定Bean名
public class BookServer {
    @Autowired   //自动装配注入
    @Qualifier("dao")  //指定注入的类型名
    private BookDaoimpl daoimpl;
    @Value("简单类型注入")
    private String name;
    @Value("${jdbc.password}")
    private String password;

    public void save(){
        System.out.println("Server运行"+name+password);
    }
}

配置类的引用 

AnnotationConfigApplicationContext ctx= new AnnotationConfigApplicationContext(Springconfig.class);
        BookDaoimpl dao= (BookDaoimpl) ctx.getBean("dao"); //括号内是注解名,也可以是类
        // BookServer dao=  ctx.getBean(BookServer.class);
        dao.save();
        ctx.close();

最后用一张表来对比一下两种方式 

XML注解
bean<bean/>
id属性
class属性

@Component(通用)

@controller

@Service

@Repository

@ComponentScan(扫描)

数据注入

引用/简单类型

setter注入(set方法)

构造器注入(构造方法)

自动装配

@Autowired
@Qualifier
@value
第三方beanbean标签@Bean(创建配置类)
作用范围(是否单例)scope属性@scope
生命周期init-method
destroy-method
@Postconstructor
@PreDestroy

以上就是spring的简单入门教程,第一次写博客,内容有点乱,以后慢慢改进。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值