<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../../jacoco-resources/report.gif" type="image/gif"/><title>DestroyableInjectionListener.java</title><link rel="stylesheet" href="../../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../../index.html" class="el_report">Apache Shiro :: Test Coverage</a> &gt; <a href="../index.html" class="el_bundle">shiro-guice</a> &gt; <a href="index.source.html" class="el_package">org.apache.shiro.guice</a> &gt; <span class="el_source">DestroyableInjectionListener.java</span></div><h1>DestroyableInjectionListener.java</h1><pre class="source lang-java linenums">/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * &quot;License&quot;); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.shiro.guice;

import com.google.inject.TypeLiteral;
import com.google.inject.matcher.Matcher;
import com.google.inject.matcher.Matchers;
import com.google.inject.spi.InjectionListener;
import org.apache.shiro.util.Destroyable;

/**
 * Injection listener that assists with honoring the {@link org.apache.shiro.util.Destroyable} interface.
 *
 * @param &lt;I&gt;
 */
class DestroyableInjectionListener&lt;I extends Destroyable&gt; implements InjectionListener&lt;I&gt; {
<span class="fc" id="L33">    public static final Matcher&lt;TypeLiteral&gt; MATCHER = ShiroMatchers.typeLiteral(Matchers.subclassesOf(Destroyable.class));</span>

    private DestroyableRegistry registry;

<span class="fc" id="L37">    public DestroyableInjectionListener(DestroyableRegistry registry) {</span>
<span class="fc" id="L38">        this.registry = registry;</span>
<span class="fc" id="L39">    }</span>

    public void afterInjection(Destroyable injectee) {
<span class="fc" id="L42">        registry.add(injectee);</span>
<span class="fc" id="L43">    }</span>

    public static interface DestroyableRegistry {
        void add(Destroyable destroyable);
    }
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.eclemma.org/jacoco">JaCoCo</a> 0.7.7.201606060606</span></div></body></html>